Темизация существующей формы в Drupal

Form API в Drupal позволяет очень гибко работать с формами. Не важно где и в каком модуле была создана форма, вы всегда можете подключить собственный файл-шаблон или функцию темизации для модификации вывода этой формы.

Как это сделать читайте далее.

Чтобы нам подключить собственное оформление уже существующей формы, нужно выполнить следующие действия:

  1. Объявить шаблон в hook_theme.
  2. Зацепиться за нужную форму с помощью hook_form_alter или hook_form_FORM_ID_alter. Установить для формы или её элемента имя объявленного в п1. шаблона.
  3. Реализовать функцию темизации или файл-шаблон.

Эти этапы актуальны для Drupal любой версии (hook_form_FORM_ID_alter появляется начиная с 6й версии, тогда как hook_form_alter есть и в более ранних).

Разберем каждый из этапов. Наш модуль будет называться — mymodule.

Объявление шаблона в модуле.

Темизация в функции.

Шаблон должен принимать единственный аргумент — объект form API Drupal. Если вы собираетесь использовать не шаблон в отдельном файле, а функцию, которая и вернет HTML код, то минимальное объявление выглядит вот так:

Функция-обработчик должна быть названа следующим образом:

Самый простой вариант реализации — использование drupal_render(). Вы скорее всего будете применять данную функцию к каждому элементу формы, вставляя их в нужные места шаблона.

При рендере отдельных элементов, Drupal помечает их специальным флагом. Поэтому, когда вы в конце примените drupal_render ко всему объекту, функция соберет все то, что вы пропустили.

Отдельный файл-шаблон.

Если темизация будет выполнена в отдельном файле-шаблоне, то его имя нужно указать в параметре template, но без указания расширения файла (без tpl.php):

Файл будет разыскиваться в папке модуля или в папке активной темы. Можно также задать и произвольный путь к файлу шаблона, об этом читайте в описании hook_theme().

Шаблон получит локальную переменную — form, объявленную в hook_theme(). На что стоит обратить внимание при работе с шаблонами?

Аккуратно выбирайте имена файлов и имена ключей для массива в hook_theme. Файлы могут перекрыть известные схемы «suggestions» drupal и ваш шаблон будет использован не по назначению :). Так шаблон form.tpl.php будет использоваться всеми формами проекта.

Здесь мы рассмотрели сразу первый и третий пункты. Осталось лишь сказать пару слов о зацепке к форме.

Подключение шаблона к выбранной форме.

Если вы решили реализовать зацепку hook_form_alter(), то вам будет необходимо отфильтровать нужную вам форму по её ID:

Начиная с 6-й версии Drupal можно зацепиться сразу к произвольной форме. Для того же some_form_id, как в примере выше, это будет:

Объявление хука отличается для разных версий Drupal, этот пример для 6й версии.

Как определить FORM_ID?

Как узнать идентификатор формы? Это просто. Любая форма, сгенерированная form API Drupal, рендерится с соответствующим HTML идентификатором формы. Например, если вы посмотрите  форму авторизации на странице /user, то увидите следующий HTML код:

Символ «подчеркивания» идентификатора был преобразован в «минус», а в остальном это искомый form_id — user_login.

Если одна и та же форма была отрендерена несколько раз при создании страницы, то к id будет добавлен порядковый номер. Например:

Мало букафф? Читайте есчо !

Создаём админ пользователя через drush

Октябрь 4, 2017 г.

Если у вас нет админ доступа в drupal, но срочно надо его получить, то можно сделать следующие вещи: поменять email у админа и пройти процедуру восстановления ...

Читать

Lightbox эффект в статьях на вашем сайте на drupal

Октябрь 2, 2010 г.

Повсеместно распространенная библиотека lightview, и уже ставший обыденным эффект отдельно открывающегося окошка с картинкой, однажды понабились и мне. ...

Читать

Получим объект публикации (node) внутри кода модуля

Апрель 20, 2014 г.

По разным причинам нам может понадобится информация объекта текущей публикации (ноды) внутри модуля.Если код модуля вызывается из шаблона, то достаточно передать локальную переменную $node. Если такой возможности нет, то код ноды можно получить из текущего ...

Читать

Вывод строки запроса построенного в db_select

Апрель 11, 2019 г.

Конструктор запросов db_select позволяет абстрагироваться от движка базы данных. Если запрос довольно сложный, то на этапе тестирования может потребоваться, что называется, убедиться в том, что конечный запрос на языке SQL к базе именно тот, что вы ожидаете. ...

Читать
 

Комментарии к «Темизация существующей формы в Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: