Как переопределить форму только на одной странице? - PullRequest
6 голосов
/ 14 июня 2010

ОК, так что это моя функция изменения формы хука. Это приводит к тому, что все регистрационные формы на сайте перезаписываются, что я не хочу, так как я просто хочу это на этой странице.

 <code>
function special_registration_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_register') {
    drupal_set_title(t('Custom registration'));
    $form['firstname'] = array('#type' => 'textfield', 
                               '#title' => t('First Name: *'), 
                               '#required' => TRUE, 
                               '#size' => 45, 
                               '#weight' => - 100,);
    $form['lastname'] = array('#type' => 'textfield', 
                              '#title' => t('Last Name: *'), 
                              '#required' => TRUE, 
                              '#size' => 45, 
                              '#weight' => - 99,);
  }
Я только имя и фамилия, которые будут записаны и сохранены в другой таблице только на этой странице.

На других страницах я просто хочу старую добрую форму. Мне все еще нужно изменить вес? Я знаю, что упускаю что-то элементарное.

Ответы [ 5 ]

2 голосов
/ 14 июня 2010

Вам просто нужно проверить текущую страницу, используя arg или $ _GET ['q'].

например:

function special_registration_form_alter(&$form, $form_state, $form_id) {
if ($_GET['q'] !== 'whatever/path' ) { return false; }
..rest of code..
}
2 голосов
/ 14 июня 2010

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

function special_registration_form_alter(&$form, $form_state, $form_id) {
  // Alter the registration form, but only on 'user/register' pages
  if ($form_id == 'user_register' && 'user' == arg(0) && 'register' == arg(1)) {
    // snipped alteration code
  }
}
0 голосов
/ 15 июля 2010

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

0 голосов
/ 15 июня 2010

Реализация hook_user();функция позволяет изменять форму, представленную пользователям при регистрации на сайте.hook_user() используется user.module и не зависит от модуля профиля.

Если хук определен как hook_user($op, &$edit, &$account, $category = NULL), параметр $op будет содержать значение 'register', если форма регистрациибыть представленным пользователю.В этом случае модуль возвращает поля формы, которые он хочет добавить в форму регистрации.

0 голосов
/ 14 июня 2010

Вы также можете использовать модуль Profile в списке модулей Core. Это решит это без какого-либо программирования, к вашему сведению.

...