1. Form API в Drupal 7
Дмитрий Дробышевский
dmitry.drobyshevsky@volcanoideas.com
http://goo.gl/gEBaK
2. План доклада
1. Что такое Form API, в чем
преимущества использования.
2. Процесс построения и обработки
формы.
3. Обзор основных свойств и
элементов форм.
4. Создание собственного элемента.
5. Создание динамических форм.
Form API в Drupal 7
3. 1. Что дает нам FORM API.
Формы создаются в виде
структурированных массивов.
Любую форму можно изменять.
К любой форме можно добавлять
функции валидации и обработки.
Предоставляется встроенная
защита от ряда уязвимостей.
Для элементов генерируется
стандартный HTML.
Form API в Drupal 7
9. Обработка форм в Drupal
Инициализация drupal_get_form()
Сбор всех элементов формы
Поиск #validate #submit
Изменения модулями (alter)
Построение формы form_builder()
Выполнение #after_build
Form API в Drupal 7
10. Обработка форм в Drupal
Отправлена ли форма?
Нет Да
drupal_render() Выполнить #validate
Вернуть html Выполнить #submit
Перенаправить браузер
Form API в Drupal 7
11. Изменение существующих форм
hook_form_FORM_ID_alter
function example_form_user_login_block_alter(&$form, &$form_state
$form_id){
$form['actions']['submit']['#value'] = t('Sign in');
}
hook_form_alter
function example_form_alter(&$form, &$form_state, $form_id){
if ($form_id == 'user_login_block'){
$form['actions']['submit']['#value'] = t('Sign in');
}
}
Form API в Drupal 7
13. Свойства формы и элементов
Свойства Свойства
корневого добавляемые ко
элемента формы всем
элементам
#description
#action
#attributes
#method
#required
#redirect
#tree
#parents
Form API в Drupal 7
14. Свойства, доступные
во всех элементах
#type #prefix
#access #pre_render
#after_build #process
#array_parents #states
#attached #suffix
#default_value #theme
#disabled #theme_wrappers
#elements_validate #title
#parents #weight
#post_render
Form API в Drupal 7
17. 4. Создание собственного элемента
формы
$form['phone_number'] = array(
'#type' => 'example_phone_element',
'#title' => t('Discrete phone number'),
'#default_value' => array('areacode' => '044',
'extension' => '9999999'),
'#description' => t('A phone number'),
);
Form API в Drupal 7
18. Создание собственного элемента
формы HOOK_element_info
function example_element_info(){
$types['example_phone'] = array(
'#input' => TRUE,
'#process' => array('example_phone__process'),
'#element_validate' => array('example_phone_validate'),
'#theme_wrappers' => array('example_inline_element'),
);
return $types;
}
Form API в Drupal 7
19. Возможные значения элемента по
умолчанию:
#input #pre_render
#process #post_render
#after_build #submit
#validate #title_display
#element_validate
Form API в Drupal 7
32. Этапы обработки ajax
Произошло событие
#ajax['event']
ajax запрос по пути
#ajax['path'] либо
‘system/ajax’
Обработка ответа
Html заполняет Массив ajax команд
#ajax['wrapper']. выполняется
33. Параметры #ajax
#ajax['callback']
#ajax['effect']
#ajax['event']
#ajax['keypress']
#ajax['method']
#ajax['path']
#ajax['prevent']
#ajax['progress']
#ajax['trigger_as']
#ajax['wrapper']
Form API в Drupal 7