PC Magazine/RE - Журнал PC Magazine/RE №11/2009. Страница 33

Node.tpl.php – шаблон, по умолчанию используемый для вывода содержимого документа. В шаблоне node.tpl.php размещается HTML-код, задающий форматирование документов, таких как Страницы (Page) и Новости (Story); в нем доступны переменные $title, $teaser, $content, содержащие заголовок, анонс и полный текст документа, а также ряд служебных переменных.

При просмотре страницы, скажем, с текстом новости выводится шаблон страницы page.tpl.php, в котором в регионе, отведенном для вывода основного содержимого (переменная $content), размещается содержимое шаблона node.tpl.php. Как и в случае с общим макетом страницы (page.tpl.php), для каждого типа документа может быть определен свой шаблон – так, часто для новостей используется один макет, для статических страниц другой, а для фотографий – третий. Чтобы определить свой шаблон для каждого типа контента, в папке с темой оформления нужно создать копию файла node.tpl.php и дать ей имя node-имя_типа_контента.tpl.php, т. е., например, файл node-blog.tpl.php будет использоваться для отображения записей в блоге, а node-book.tpl.php – для отображения страниц книги.

Block.tpl.php – определяет внешний вид блока; как и в случае с материалами, шаблон блока может быть задан для каждого модуля (блоки, создаваемые модулем user, будут использовать один шаблон, а блоки, создаваемые модулем block, – другой) или для каждого блока в отдельности. Маски имен файлов шаблонов для блоков имеют вид: шаблон block-module_name.tpl.php и используется для всех блоков, создаваемых модулем module_name; шаблон block-module_name-delta.tpl.php может использоваться в случае, если модуль создает несколько блоков и вы хотите каждому из них задать свой шаблон. Параметр delta – это id блока, который задается создающим его модулем. Шаблон block-region.tpl.php служит для отображения блока в определенном регионе.

Каждый модуль, написанный с применением слоя темизации Drupal, должен разделять функции, генерирующие данные, и функции темизации, оформляющие эти данные в виде HTML-кода. Функции темизации регистрируются модулями через специальный хук hook_theme() и имеют имена, начинающиеся с префикса theme_, например, theme_list(). Такие функции не реализуют никакой бизнес-логики, а только получают набор данных на входе и отдают сформированный HTML-код на выходе. Функции темизации могут быть переопределены в файле template.php, т. е. разработчик может заменить стандартное оформление данных, возвращаемых модулем, по своему желанию. Для этого нужно скопировать в него соответствующую функцию темизации, заменить в ней префикс theme_ на имя используемой темы и внести в нее необходимые изменения.

Из всех перечисленных выше файлов обязательный только *.info, в случае отсутствия в папке с темой файлов page.tpl.php, node.tpl.php, block.tpl.php или template.php будут использоваться стандартные шаблоны. Ссылку на список стандартных шаблонов можно найти в конце статьи.

Обычно *.info-файл темы оформления содержит конфигурационные данные (см. листинг 1). В первых двух строчках файла обычно указывается имя и дается описание темы оформления, которое будет выводиться в интерфейсе администратора в списке доступных тем. Далее указываются версия ядра Drupal, для которой написана эта тема, и используемый шаблонизатор.

Листинг 1

name = Theme name

description = Theme description.

version = VERSION

core = 6.x

engine = phptemplate

stylesheets[all][] = style.css

stylesheets[print][] = print.css

scripts[] = effects.js

scripts[] = menu.js

regions[left] = Left sidebar

regions[content] = Content

regions[header] = Header

regions[footer] = Footer

Параметры stylesheets определяют список CSS-файлов, которые будут подключены ко всем страницам. В первой паре квадратных скобок через запятую может быть указан список параметров, присваиваемых атрибуту media HTML-тега link (подробную информацию о назначении этого атрибута можно найти по ссылке во врезке в конце статьи). Из перечисленных здесь имен файлов, а также из файлов стилей, которые подключены модулями через функцию drupal_add_css(), будет сформирован HTML-код, подключающий указанные стили и доступный в шаблоне page.tpl.php в переменной $styles. Кроме того, шаблонизатор попытается найти в папке с темой оформления файл style.css; если он есть, то он также будет подключен к странице.

Аналогичное назначение и у параметра scripts. Перечисленные в нем JavaScript, а также сценарии, добавленные модулями через функцию drupal_add_js(), будут подключены ко всем страницам сайта. Если в папке с темой оформления есть файл script.js, он также будет подключен к каждой странице.

Параметры regions определяют список доступных в шаблоне page.tpl.php регионов. Значение в скобках станет PHP-переменной, например $left или $footer (поэтому здесь недопустимо использовать пробелы, дефисы и другие запрещенные в именах PHP-переменных символы), а значение после знака «равно» – именем региона, доступным на странице управления блоками.

Файл page.tpl.php при использовании приведенного выше *.info-файла может иметь структуру подобную приведенной в листинге 2. Это очень простой пример, призванный продемонстрировать общую логику разработки темы оформления для Drupal, поэтому здесь опущено много деталей. Лучший способ научиться темизировать Drupal – изучить существующую тему оформления, например тему Zen. Она содержит детальное описание всех используемых стилей и переменных.

Листинг 2

<HTML>

  <head>

    <title><?php print $head_title ?></title>

    <?php print $head ?>

    <?php print $styles ?>

    <?php print $scripts ?>

  </head>

  <body>

    <div class="header">

      <?php print $header ?>

    </div>

    <div class="left-sidebar">

      <?php print $left ?>

    </div>

    <div class="content">

      <?php print $content ?>

    </div>

    <div class="footer">

      <?php print $footer ?>

    </div>

  </body>

</HTML>

Переменные $header, $left и $footer в нашем примере будут заполнены HTML-кодом блоков, которые администратор сайта разместит в соответсвующих регионах. В переменной $head_title будет находиться загловок страницы, «склеенный» Drupal из имени сайта и заголовка текущей страницы, а переменные $head, $styles и $scripts будут заменены соответственно метатегами, ссылками на файлы стилей и JavaScript.

Переменная $content в шаблоне page.tpl.php заменится на содержимое текущей страницы, например на тело документа (шаблон node.tpl.php) или содержимое, генерируемое каким-либо модулем. Если в текущей теме оформления нет файла node.tpl.php, то используется одноименный файл из ядра Drupal, находящийся в папке modules/node.

Оформляем Views

Views – один из самых востребованных модулей для Drupal – позволяет создавать списки документов (представления, view), отфильтрованные по любому сложному алгоритму. На выходе модуль возвращает массив данных, который выводится в шаблоне, соответствующем выбранному администратором типу отображения (display) данных. Каждое представление может быть отображено в виде таблицы, маркированного списка, решетки (grid) и т. п. Чтобы переопределить используемый для отображения представления шаблон, нужно в свойствах представления в блоке Basic settings найти параметр Theme information и посмотреть в нем имена шаблонов, которые могут быть использованы модулем для отображения текущего представления. Затем нужно в подпапке theme модуля Views найти шаблон, соответствующий выбранному типу отображения (например, views-view-table.tpl.php для табличного варианта отображения или views-view-list.tpl.php для списка), скопировать его в папку с текущей темой оформления и присвоить ему одно из имен, перечисленных в Theme information. Теперь созданный шаблон можно настроить для своих нужд.

В шаблоне node.tplp.php доступно несколько переменных, самые важные из них: $title – заголовок документа, $node – объект, содержащий полную информацию о текущем документе, $submitted – HTML-код, содержащий информацию об авторе документа, $content – основное содержимое (тело) текущего документа. Не путайте переменную $content из шаблона node.tpl.php с одноименной переменной из шаблона page.tpl.php. В первой есть только «тело» текущего документа без дополнительной информации (автор, дата публикации и т. д.), а во второй – полный HTML-код, который будет показан пользователю в регионе content. Например, при просмотре ленты последних новостей переменная $content каждой новости будет содержать текст одной новости, а переменная $content в шаблоне page.tpl.php – HTML-код всех выводимых новостей (см. врезку «Описание схемы страницы»).

Самый простой пример шаблона node.tpl.php см. в листинге 3. Все переменные, которые выводятся в шаблоне page.tpl.php, могут быть переопределены в функции phptemplate_preprocess_page(), размещенные в файле template.php текущей темы оформления. Аналогично все переменные шаблона node.tpl.php могут быть переопределены в функции phptemplate_preprocess_node(). Кроме того, в этих функциях могут быть определены дополнительные переменные, которые станут доступны в соответствующих шаблонах. Пример практического использования данных функций можно найти в документации (http://api.drupal.ru) или в одной из существующих тем оформления – например, приведенных во врезке «На заметку: готовые решения».

Листинг 3

<div class="node<?php if ($sticky) {

    print " sticky";

  } ?>

  <?php if (!$status) {