Читать «Журнал PC Magazine/RE №11/2009» онлайн - страница 98

PC Magazine/RE

Теперь вернемся к основной теме статьи – темизации Drupal. Функция drupal_get_form, получив на вход $form_id, идентификатор формы, которую нужно вывести на экран, вызывает функцию form_builder, проверяющую права доступа текущего пользователя к каждому из полей формы, и при наличии этих прав выводит стандартный HTML-код для каждого элемента формы. Каждый созданный элемент формы имеет уникальный атрибут id. Самый простой способ переопределения внешнего вида элементов формы – создание CSS-файла с описанием стилей нужных элементов формы. Если этого недостаточно, элементам формы можно добавить параметры #prefix и #suffix, которые будут содержать HTML-код, выводимый до и после созданного элемента. Если и этого мало, можно определить параметр #theme, который должен содержать используемое имя функции темизации.

Персональные функции темизации можно задать для всей формы целиком или для каждого ее элемента. По умолчанию Drupal для темизации формы пробует найти функцию theme_form_id, поэтому использование параметра #theme не обязательно.

Все функции, определенные параметром #theme, должны быть также объявлены через hook_theme (описание этого хука было дано в предыдущей статье).

Давайте изменим внешний вид созданного текстового поля. Для этого сначала создадим реализацию хука hook_theme:

function название_модуля_theme() {

  return array(

    'example_text_field_theme_function' => array(

      'arguments' => array('form' => NULL),

    ),

  );

}

Затем модифицируем массив $form["example_text_field"], который создается в функции test_form, добавив в него параметр #theme:

$form["example_text_field"] = array(

  '#type' => 'textfield',

  '#title' => 'Example text field',

  '#description' => 'Text must contain more then 3 symbols',

  '#theme' => 'example_text_field_theme_function',

);

Теперь мы можем объявить функцию theme_example_text_field_theme_function и задать в ней любой HTML-код для отображения выбранного элемента: