Предстоит написать несколько модулей для кастомных полей, поэтому для себя создал этот документик, чтобы возвращаться к нему потом и быстро перечитывать для чего нужная какая функция... и не наступать на грабли, которые почему-то не были освещены в других уроках, которые я находил в сети (когда виджет редактирования поля есть, данные записаны правильно в $form_state, а сохранения поля в таблицу базы данных не происходит).
Цель создания - иметь друпал поля с возможность записывать несколько отдельных данных в одном поле (compound fields).
1. Расскажем Друпалу о нашем поле
-
hook_field_info()
Объявляет новый тип поля, указывает какой виджет (форма для редактирования филда) и форматер (функция отображения поля) будут использованы.
Указываемые строки виджета и форматера по-умолчанию - не являются функциями; это идентификаторы определенных прописанных форматеров и виджетов, которые будут объявлены позднее. Можно объявить более одного типа филдов. -
hook_field_validate()
Обязательный хук! Фунция валидации данных, введенных в форму редактирования создаваемого поля.
Без него запись данных в таблицу БД не будет производится, хотя внешне все будет работать - форматеры, виджеты и т.п. Если предполагается ввод данных сторонними пользователями - надо хорошенько валидировать данные перед записью в БД. -
hook_field_is_empty()
Помогает друпалу определиться является ли поле пустым
Даже если там есть какие-то дефолтные данные). -
hook_field_schema()
Возвращает часть схемы для базы данных
Стандартные колонки для филдов добавляются друпалом, поэтому нужно только указать нужные филду колонки для хранения информации. Функция размещается в install файле! Можно объявляеть схемы для разных типов филдов, в зависимости от имени филда, переданного в функцию в первом аргументе ($field).
2. Создание виджета (формы редактирования) своего поля
-
hook_field_widget_info()
Говорит Друпалу о наличии определенного виджета Этого будет достаточно, чтобы увидеть выбор виджета в интерфейсе редактора поле друпала.
-
hook_field_widget_form()
Создает формы для редактирования вашего кастомного поля. Используется Drupal Form API
Если объявляется сразу несколько типов филдов в одном модуле, надо проверять запрашиваемый сейчас тип в переменной $instance['widget']['type'].
3. Форматер поля (вывод данных при просмотре ноды)
-
hook_field_formatter_info()
Говорит Друпалу о наличии определенного форматера
-
hook_field_formatter_view()
Код отрисовки данных для посетителя. Возвращает рендерный-массив, а не html код.
4. Дополнительные хуки
Они не являются обязательными, но окажутся довольно полезными.
-
hook_field_presave()
Используется чтобы проставить поля по умолчанию, если пользователь их не проставил.Что позволит избежать ошибок с БД запросами при попытке сохранения, если 'not null' установлен в какой-то колонке.
-
hook_form_field_ui_field_edit_form_alter()
This is hook_form_FORM_ID_alter(). This is a really useful hook for manipulating existing field forms, and adding default values that have to be calculated.
- Log in to post comments