Полный контроль на Drupal-формами
Подготовка формы
Сборка формы
Валидация формы
Сохранение формы
Рендер формы
Как работает кеширование форм
John VanDyk & Matt Westgate «Pro Drupal Development»
• http://www.drupalbook.com/errata2?page=4
Чем можно управлять?
Структурой элементов формы Валидацией формы Сабмитом формы Изменять форму после полной сборки Менять можно до и после темизации Управлять темизацией формы
Изменение форм из модуля
function MODULE_form_alter(&$form, &$form_state, $form_id) {//Добавляем свой submit-обработчик во все формы$form['#submit'][] = '_node_wizard_form_submit';
}
Изменение формы по FORM_ID
function MODULE_form_FORM_ID_alter(&$form, &$form_state) {//Добавляем свой submit-обработчик во все формы$form['#submit'][] = '_node_wizard_form_submit';
}
#after_build $form['file_directory_path'] = array( '#type' => 'textfield', '#title' => t('File system path'), '#default_value' => file_directory_path(), '#maxlength' => 255, '#description' => t('A file system ... on an existing site.'), '#after_build' => array('system_check_directory'), );
function MODULE_form_alter($form, &$form_state) { $form['#after_build'][] => 'system_check_directory';}
function system_check_directory($form_element, &$form_state) { file_check_directory($form_element['#value'],
FILE_CREATE_DIRECTORY, $form_element['#parents'][0]); return $form_element;}
Смена веса модуляВ файле MODULE.install/** * Implementation of hook_install(). */function MODULE_install() { db_query("UPDATE {system} SET weight = 1111 WHERE name
= 'MODULE'"); //Отрицательный вес - модуль имеет более высокий //приоритет и выполнится раньше, а более высокое //значение веса (положительное) - модуль имеет более // низкий приоритет исполнения. //Таким образом модули ранжируются по весу на шкале от // минус бесконечности до плюс бесконечность. //Начало выполнения - это минус бесконечность и конец - // плюс бесконечность. Идём от минуса к плюсу.}
Хук форм_альтер не вызывается при перестроении формы, если были ошибки валидации
Когда вызывается #after_build
Полезные ссылки
• http://api.drupal.ru/api/group/form_api/6