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()
, вне зависимости от порядка модулей.
Смотрите также
Параметры
&$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, полезно бывает добавить в модуль следующий код:
ID формы будет отображен для пользователя с UID=1
Хех, довольно извращенное решение :)
Можно поставить модуль Devel и сделать лишь один вызов в mymodule_form_alter —
dpm($form_id)
. Сообщение будет показано только админу, никакой опасности.dsm не получится использовать для формы регистрации или входа на сайт (т.е. когда еще не выполнен вход на сайт).
Этот хук не выполняется, когда в одном из полей допущена ошибка при вводе и форма показывается снова с сообщением об ошибке.
Чтобы внести изменения в этом случае нужно использовать hook_init().