hook_form_FORM_ID_alter

Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

developer/hooks/core.php, строка 743

Версии
6
hook_form_FORM_ID_alter(&$form, &$form_state)

Предоставляет возможность изменить отдельную форму, вместо глобального хука hook_form_alter().

Авторы модулей могут реализовать хук hook_form_FORM_ID_alter() чтобы изменить конкретную форму, вместо того чтобы реализовывать hook_form_alter() и проверять в нем ID формы, а также вместо длинных операторов switch при изменении нескольких форм.

Заметим, что этот хук вызывается до hook_form_alter(). Поэтому все реализации hook_form_FORM_ID_alter() будут выполнены до запуска любой из реализаций hook_form_alter(), вне зависимости от порядка модулей.

Смотрите также

drupal_prepare_form()

Параметры

&$form Многомерный массив элементов формы, который включает форму.

&$form_state Ассоциативный массив, который содержит текущее состояние формы.

Возвращаемое значение

Нет.

Связанные темы

Код

<?php
function hook_form_FORM_ID_alter(&$form, &$form_state) {
  // Modification for the form with the given form ID goes here. For example, if
  // FORM_ID is "user_register" this code would run only on the user
  // registration form.

  // Add a checkbox to registration form about agreeing to terms of use.
  $form['terms_of_use'] = array(
    '#type' => 'checkbox',
    '#title' => t("I agree with the website's terms and conditions."),
    '#required' => TRUE,
  );
}
?>

Пользовательские комментарии

Для того, чтобы узнать FORM_ID, полезно бывает добавить в модуль следующий код:

<?php
function mymodule_form_alter(&$form, $form_state, $form_id) {
	global $user;
	if ($user->uid==1) {
		$form['showformid']=array(
			'#type' => 'markup',
			'#value' => t('Form ID: ').$form_id,
			'#weight' => -10
		);	
	}
}
?>

ID формы будет отображен для пользователя с UID=1

Хех, довольно извращенное решение :)

Можно поставить модуль Devel и сделать лишь один вызов в mymodule_form_alter — dpm($form_id). Сообщение будет показано только админу, никакой опасности.

dsm не получится использовать для формы регистрации или входа на сайт (т.е. когда еще не выполнен вход на сайт).

Этот хук не выполняется, когда в одном из полей допущена ошибка при вводе и форма показывается снова с сообщением об ошибке.
Чтобы внести изменения в этом случае нужно использовать hook_init().

Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему