Тематика Drupal 7: hook_theme или drupal_get_form

Мне интересно, как лучше всего отображать форму на странице (например: форма регистрации для вип-пользователей ... и не в блоке, а в качестве основного контента).

путь user.module в user_menu (*hook_menu*):

  $items['vip/register'] = array(
    'title' => 'Create new vip account',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('vip_register_form'),
    'access callback' => 'user_register_access',
    'type' => MENU_LOCAL_TASK,
  );

Или создав тему через use_theme (*hook_theme*) (вымышленный):

$items['vip/register'] = array(
    'title' => 'Create new vip account',
    'page callback' => 'theme',
    'page arguments' => array('vip_register'),
    'access callback' => 'user_register_access',
    'type' => MENU_LOCAL_TASK,
);

function user_theme() {
  return array(
    'vip_register' => array(
    )
  );
}

function theme_vip_register(){
    return drupal_get_form('vip_register_form');
}

Я интересуюсь этим для тематических целей, потому что дизайнер потом сделает графическую интеграцию.

Спасибо за советы.


person Community    schedule 06.11.2012    source источник
comment
Речь шла о передовой практике, но она очень специфична, это правда. В конце концов, дизайнер предпочитает иметь объявленный шаблон и чтобы функции тем возвращали Render Array вместо Render Array.   -  person    schedule 14.11.2012


Ответы (1)


Это не настоящий ответ, но я не совсем уверен, в чем ваш вопрос. Правила Drupal #1: Никогда не взламывайте ядро!

Как следует из названия, функции темы предназначены только для темы что-то. Итак, вам нужна форма, построенная в первую очередь.

$items['vip/register'] = array(
    'title' => 'Create new vip account',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('vip_register_form'),
    'access callback' => 'user_register_access',
    'type' => MENU_LOCAL_TASK,
  );

Когда пользователь обращается к странице example.com/vip/register, функция drupal_get_form будет вызываться с аргументом vip_register_form.

Итак, теперь вам нужно определить функцию для возврата этой формы (регистрации VIP-пользователя).

function vip_register_form($form, &$form_state){
  ..your FAPI stuff here.
  return $form;
}

Теперь пользователь, открывший страницу VIP-регистрации, увидит эту форму вместо обычной формы. даже поля пароля и имени пользователя будут недоступны, если вы их не добавите. Если вы хотите изменить существующую форму, просто скопируйте хук меню на новый путь:

$user_menu_routers = user_menu();
$items['vip/register'] = $user_menu_routers['user/register'];

Теперь вы можете изменить свою форму на странице vip/register (которая аналогична обычной странице регистрации пользователя), используя хук form_alter. Вы можете настроить тему формы вручную, не затрагивая при этом уже существующую.

person AKS    schedule 07.11.2012