Отправляет email-рассылки с помощью сервиса Sendsay

Заметки Web-программиста

  Все выпуски  

Заметки Web-программиста Темизация вывода в Drupal


Данная статья была только что опубликована на сайте Заметки Web-программиста

В одной из прошлых заметок в модуле Drupal была создана страница. При создании страницы мы просто вывели кусок текста на страницу и всё. Можно было бы конечно немного её разнообразить всякими разными тегами и стилями. Для нового года такая красота в самый раз, но для обычного сайта - как-то не очень.

Ведь приходится выводить не только текстовую информацию, но структурированную. Такую как:

  1. списки
  2. таблицы
  3. элементы форм
  4. и пр.

И все эти элементы необходимо выводить не как-нибудь, а в соответствии с настройками текущей темы сайта, т.е. их необходимо темизировать.
Тема темизации достаточно обширная. На одном ее конце стоят создание темы для сайта, или как минимум, ее редактирование. На другом - вывод отдельных элементов в соответствии с темой сайта. О последнем и поговорим сейчас.
Функции темизирующие вывод материала в Drupal начинаются с theme_. После знака подчеркивания идет название элемента который темизируется данной функцией. Например: theme_table - выводит таблицу. theme_button - кнопку формы.
Список этих функций можно посмотреть на странице посвященной темизации Drupal.
Кроме того, используя с помощью хука theme можно создавать свои функции темизации.
Рассмотрим теперь начала темизации на практике. Зададим функцию, обеспечивающую вывод на экран списка и таблицы, следующим образом:

<?php
function theme_example_page(){
   
$output='<p>'.'На этой странице будут продемонстрированы некоторые возможности правильной темизации страницы модуля'.'</p>';
   
$output.=theme_item_list(array('hook_help', 'hook_menu','hook_theme'),'Хуки Друпал');
   
# Массив с содержимым заголовка таблицы
   
$header=array('ПО','Автор');
   
# Массив с содержимым нашей таблицы
   
$rows=array(array('Linux','Линус Торвальдс'),array('Drupal','Дрис Байтаерт'),array('PHP','Расмус Лердорф'),array(array('data'=>'Всех не перечислишь...','colspan'=>2)));
   
$output.=theme_table($header,$rows,array(),'ПО и его авторы');
    return
$output;
}
?>

Рассмотрим что-же мы вывели:

  1. Название страницы. Оно определено еще в хуке меню и друпал вывел его сам, без нашей помощи.
  2. Просто текст. Здесь всё ясно.
  3. Списки. Используется функция theme_item_list(). Первый параметр: массив со списком строк. Второй - это заголовок списка. Хотя и устанавливается с помощью тега h3, который к самому списку формально отношения не имеет. Дальше идут необязательные параметры, задающие тип списка: 'ul' - по умолчанию или 'ol' - цифровой и его параметры. Подробнее можно прочитать в справке.
  4. Таблицы. Создает заголовок, разукрашивает чередующиеся строки в разные цвета и делает некоторые другие вещи. У данной функции есть и другие достоинства - например при работе с БД можно устанавливать параметры сортировки данных в колонках. Но пока об этом не будем. Рассмотрим параметры используемые при создании таблицы:
    • Массив $header, содержащий поля заголовка. В данном случае приведен пример его простейшего использования.
    • Массив $rows, содержащий ячейки таблицы. Также может быть различной сложности, с указанием атрибутов каждой ячейки. Ячейки в первых трёх строках не отличаются сложностью и поэтому соответствующие элементы массива хранят содержимое ячейки. Но к последней ячейке потребовалось добавить атрибуты и поэтому элементом массива стал новый массив. В этом массиве элемент с ключом 'data' содержимое ячейки, а элемент остальные элементы являются атрибутами ячейки. Ключ - это название атрибута, значение элемента массива - значение атрибута. В примере 'colspan'=>2 будет атрибутом ячейки colspan="2". В результате в нижней строке получим объединение ячеек.
    • Пустой массив. Предназначен для задания атрибутов таблицы, примерно также как это было сделано для ячейки. В данном случае он пустой, т.е. таблица выводится с параметрами по умолчанию. Если же нужно отобразить её как-нибудь по уникальному то можно или задать атрибуты в этом массиве или же изменить ее свойства с помощью таблицы стилей. Добавив в этот массив 'id'=>'this_table_css' можно задать для этой таблицы уникальный набор стилей. Ну а как добавить таблицу стилей к модулю на этом сайте уже писалось.
    • Заголовок таблицы. Тут я думаю всё ясно.

В избранное