Drupal 6: темизация views

Работаю сейчас над созданием интересного проекта на drupal 6. И понадобилось мне видоизменить стандартный вывод вьюсы, в частности, переставить pager в верхнюю часть блоков, генерируемых views.

Для этого надо переопределить в теме шаблон views-myview.tpl.php

Вообще, я не часто использую широкие возможности темизации вьюсов, обычно дело обходится темизацией через css. А зря, потому что многие задачи при использовании views за счет темизации можно решить куда более изящно.

Итак, в ниже следующем коде все предельно просто - функция, которая выводит постраничный навигатор перенесена в начало, и выводится сразу после заголовка. Все остальное - без изменений.

  1.  
  2.   <?php if ($admin_links): ?>
  3.     <?php print $admin_links; ?>
  4.   <?php endif; ?>
  5.  
  6.   <?php if ($header): ?>
  7.  
  8.       <?php print $header; ?>
  9.    
  10.   <?php endif; ?>
  11.  
  12.   <?php if ($pager): ?>
  13.     <?php print $pager; ?>
  14.   <?php endif; ?>
  15.  
  16.   <?php if ($exposed): ?>
  17.    
  18.       <?php print $exposed; ?>
  19.    
  20.   <?php endif; ?>
  21.  
  22.   <?php if ($attachment_before): ?>
  23.    
  24.       <?php print $attachment_before; ?>
  25.    
  26.   <?php endif; ?>
  27.  
  28.   <?php if ($rows): ?>
  29.    
  30.       <?php print $rows; ?>
  31.    
  32.   <?php elseif ($empty): ?>
  33.    
  34.       <?php print $empty; ?>
  35.    
  36.   <?php endif; ?>
  37.  
  38.   <?php if ($attachment_after): ?>
  39.    
  40.       <?php print $attachment_after; ?>
  41.    
  42.   <?php endif; ?>
  43.  
  44.   <?php if ($more): ?>
  45.     <?php print $more; ?>
  46.   <?php endif; ?>
  47.  
  48.   <?php if ($footer): ?>
  49.    
  50.       <?php print $footer; ?>
  51.    
  52.   <?php endif; ?>
  53.  
  54.   <?php if ($feed_icon): ?>
  55.    
  56.       <?php print $feed_icon; ?>
  57.    
  58.   <?php endif; ?>
  59.  
  60. <?php /* class view */ ?>

Не забудьте сбросить кеш после переопределения системных шаблонов.

Это пример из разряда "совсем просто". Вообще возможности в плане темизации вьюсов очень широки.

1. Определение вида представления

При создании views'ы мы можем выбрать разные виды для отображения представления - страница, блок, вложение (attach) и так далее. В блоке основных настроек (basic settings) есть пунктик "Тема: информация" (theme information). Здесь мы увидим несколько групп шаблонов для представления (views):

Основной шаблон: views-view.tpl.php (и варианты views-view--your-view-name.tpl.php, views-view--block.tpl.php, views-view--your-view-name--block.tpl.php, views-view--.tpl.php, views-view--block-1.tpl.php, views-view--your-view-name--block-1.tpl.php). Здесь задается основная структура вьюсы -  административные ссылки, заголовок, формы фильтров, навигатор (тот самый pager, который мне и нужно было передвинуть), ссылка "more", подвал, блок для вывода текста в пустом представлении, содержимое представления, attached views (вложения).

Шаблоны стиля форматрирования - views-view-unformatted.tpl.php (без форматирования), кроме того может быть - сетка, html список, таблица и т.д. Тут темизируется заголовок и строки представления.

Шаблон вывода строк - views-view-fields.tpl.php, в этом шаблоне описывается структура строки, в которой будет выводиться содержимое представления, в частности - field label и field content.

Шаблон вывода полей (field) - views-view-field.tpl.php по умолчанию, и для каджого поля свой набор возможных шаблонов, в которых можно переопределить стандартный вывод.

Актуально для старых версий Views (до 6.x-2.6) Если тема админки отличается от той, что установлена для сайта, в разделе theme information будет показана информация для админской темы, соответственно нужно переключить админскую тему на вермя темизации вьюсов.

2. Наследование шаблонов views

В theme information для каждой из вышеобозначенных групп шаблонов предлагается список файлов, первые выделены жирным шрифтом - общие для всех вьюсов, последующие - относятся к конкретному представлению, конкретным стилям вывода представлений и к конкретным полям, использующимся в редактируемой вьюсе. То есть перечислены файлы в порядке от общего к частному. При Views 2 "проверяет" наличие шаблонов с конца, то есть больший приоритет у максимально кастомизированных файлов. Если таковых нет - Views2 обращается к общему шаблону.

Допустим, у нас есть три представления - alpha, betta, gamma. Файл views-view.tpl.php будет контролировать шаблон, одинаковый для всех трех представлений. Если вы создадите файл views-alpha.tpl.php - он будет применен к представлению alpha, betta и gamma будут выводиться в соотсветствии со стандартным шаблоном.

Для конкретного представления можно также создать шаблоны для разных стилей форматирования представления: например, для блока и страницы.

Файлы views-view--alpha--page.tpl.php and views-view--alpha--block.tpl.php  соотвествтвенно будут использоваться для формирования шаблона представления alpha, сгенерированного как страница и блок.

Файл views-view--page.tpl.php будет контролировать вывод любой вьюсы в виде страницы, если для него не задан свой.

Файл views-view--page-1.tpl.php будет контролировать вывод любого представления в виде страницы с использованием pager'а, а файл views-view--alpha--page-1.tpl.php - только шаблон страницы с постраничной навигацией для представления alpha.

По тому же принципу темизируются все группы шаблонов views. Шаблоны вывода полей (field) передаются в шаблоны строк (row style), они в свою очередь передаются в шаблоны видов вывода представлений, а они уже в общие шаблоны для представлений.

3.  Создание своих файлов шаблонов для views.

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

Например, изначально для представления betta поле "заголовок" (field title) формируется файлом views-view-field.tpl.php. Создаем файл file—views-view-field--beta--title.tpl.php и переопределяем вывод этого поля так, как нам необходимо.

Скажем, стандартный вывод поля
<?php print $output; ?>
мы можем заменить на

<?php print $output; ?>

.

P.S. Часть материала - вольный перевод статьи Views 2 theming. Надеюсь, получилось достаточно понятно :)

Вообще, сайтостроение - увлекательнейшая штука. Как сотвеорение мира - могу так, а могу эдак. Впрочем, главное любить свое дело, тогда и получаться будет.