Главная Новости

Создание своего элемента формы в Drupal 7. Расширяем Forms API.

Опубликовано: 12.01.2018

видео Создание своего элемента формы в Drupal 7. Расширяем Forms API.

Создание облака тегов, Drupal 7, модуль cctags

Сегодня я расскажу о том, как создавать свои элементы форм, которые будут доступны для использования через Forms API . Всю разработку я продемонстрирую на примере создания jSlider Form API с авторскими дополнениями и объяснениями кода. Итак, пошагово.


Работа с Drupal API.

Шаг первый. Описываем элемент формы.

Для описания элемента в модуле надо имплементировать хук hook_element_info() , в котором надо вернуть массив, ключом которого будет будующий тип элемента, и параметры, которые он может принимать.

/** * Implements hook_element_info(). */ function jslider_form_api_element_info ( ) { $types [ 'transfer_slider' ] = array ( '#input' => TRUE , '#process' => array ( 'transfer_slider_process' ) , '#element_validate' => array ( 'transfer_slider_validate' ) , '#left' => t ( 'Left' ) , '#right' => t ( 'Right' ) , '#theme' => array ( 'transfer_slider' ) , '#left_value' => 0 , '#right_value' => 100 , '#size' => 5 , ) ; return $types ; }

Здесь описан элемент формы так, как его надо будет добавлять в форму. Обработчики элемента будут описаны чуть дальше.

Возможные значения по умолчанию:

#input : Булевая переменная. Определяет, несёт ли элемент в себе какие-то данные (даже если он скрыт). #process : Массив функций, которые будут обрабатывать элемент формы. Должен принимать переменные $element, $form_state и $complete_form. #after_build : Массив функций, которые будут запущены после того, как элемент будет построен. Принимает переменные $element и $form_state. #validate : Массив функций, которые будут валидировать форму, в которой описан элемент, при его сабмите. Принимаются переменные $form и $form_state. #element_validate : Массив функций, которые будут валидировать элемент при сабмите. Принимаются переменные $element и $form_state. #pre_render : Массив функций, которые должны быть выполнены перед началом рендера элемента. Функции получают переменные $element и $form_state. #post_render : Массив функций, которые должны быть выполнены после окончания рендера элемента. Функции получают переменные $element и $form_state. #submit : Массив функций, который выполняются при сабмите формы. Функции принимают переменные $form и $form_state. #title_display : Строка, которая отображает как заголовок должен быть отображён. Более подробно тут .

Все остальные параметры, которых нет в этом списке - это уже дополнительные, которые вам надо будет самостоятельно обрабатывать в своих #process фунциях .