Skip to main content
Темплейты для Drupal

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

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

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

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

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

 

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

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

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 и переопределяем вывод этого поля так, как нам необходимо.

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

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

7

Comments

0xScript's picture
0xScript

Спасибо

nickolostsoul's picture
nickolostsoul

Подскажите пожалуйста, как сделать так, чтобы в Unformatted list у анонсов картинка выводилась с левой стороны и обтекалась текстом справа? Меня полностью устраивает данный формат за исключением того, что картинка выводится сверху или под текстом.

ФОРМАТ
Формат:Unformatted list | Настройки
Показать:Содержимое | Анонс

Мария Шерскова's picture
Мария Шерскова

Это элементарный css: float: left для дива, в котором выводится картинка

 

nickolostsoul's picture
nickolostsoul

Я что-то туплю уже вторую неделю, никак не пойму, как правильно это сделать? Куда и главное, как прописать? Пожалуйста подскажите!

nickolostsoul's picture
nickolostsoul

Сделал шаблон для вывода по образу и подобию:

<?php foreach ($rows as $id => $row): ?>
<div class="<?php print $classes_array[$id]; ?>">
<?php print $row; ?>
</div>
<?php endforeach; ?>

в цикле рисуются строки($row), а как мне вывести отдельно картинку из строки?

nickolostsoul's picture
nickolostsoul

И не очень понятен вот этот абзац:

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

Если вам не сложно распишите поподробнее. Спасибо!

Илья's picture
Илья

Ребят, темизирую views-view-fields.tpl.php и никак не могу понять как мне достать ссылку на ноду
На данный момент использую конструкцию
<?php print file_create_url('node/'.$row->_field_data['nid']['entity']->nid);?>
Но тут ссылка вида site.ru/node/3
А я хочу site.ru/moya-stranica
Как такое чудо сотворить?