Темизация Drupal. Часть 4. Темизация Views
Submitted by Ромка on Вс, 03/01/2010 - 23:09
Views — один из самых востребованных модулей для Drupal — позволяет создавать списки документов (представления, view), отфильтрованные по любому сложному алгоритму. На выходе модуль возвращает массив данных, который выводится в шаблоне, соответствующем выбранному администратором типу отображения (display) данных. Каждое представление может быть отображено в виде таблицы, маркированного списка, решетки (grid) и т. п. Чтобы переопределить используемый для отображения представления шаблон, нужно в свойствах представления в блоке Basic settings найти параметр Theme information и посмотреть в нем имена шаблонов, которые могут быть использованы модулем для отображения текущего представления. Затем нужно в подпапке theme модуля Views найти шаблон, соответствующий выбранному типу отображения (например, views-view-table.tpl.php для табличного варианта отображения или views-view-list.tpl.php для списка), скопировать его в папку с текущей темой оформления и присвоить ему одно из имен, перечисленных в Theme information. Теперь созданный шаблон можно настроить для своих нужд.
Например, вот так выглядит шаблон views-view-table.tpl.php:
<table class="<?php print $class; ?>"> <?php if (!empty($title)) : ?> <caption><?php print $title; ?></caption> <?php endif; ?> <thead> <tr> <?php foreach ($header as $field => $label): ?> <th class="views-field views-field-<?php print $fields[$field]; ?>"> <?php print $label; ?> </th> <?php endforeach; ?> </tr> </thead> <tbody> <?php foreach ($rows as $count => $row): ?> <tr class="<?php print implode(' ', $row_classes[$count]); ?>"> <?php foreach ($row as $field => $content): ?> <td class="views-field views-field-<?php print $fields[$field]; ?>"> <?php print $content; ?> </td> <?php endforeach; ?> </tr> <?php endforeach; ?> </tbody> </table>
Первые 14 строк этого шаблона выводят заголовок страницы и таблицы с данными, а самая интересная и важная часть шаблона сосредоточена в строках с 15 по 23 — здесь в цикле выводятся данные, выбранные запросом, заданным в настройках представления. Данные возвращаются в виде рекордсета, то есть структуры данных, которую можно представить как таблицу, строками которой являются выбранные объекты (например ноды), а ячейками — значения полей объекта (например поля "заголовок" или "автор" ноды).
Вот этот же кусок шаблона с комментариями:
// Цикл по объекту $rows, содержащему все возвращенные данные // $row — одна строка <?php foreach ($rows as $count => $row): ?> <tr class="<?php print implode(' ', $row_classes[$count]); ?>"> // Цикл по всем ячейкам внутри строки // $field — имя поля, например nid, title и т.д. // $content — значение поля <?php foreach ($row as $field => $content): ?> <td class="views-field views-field-<?php print $fields[$field]; ?>"> <?php print $content; ?> </td> <?php endforeach; ?> </tr> <?php endforeach; ?>
Это достаточно универсальный и не очень удобный шаблон, так как он оборачивает одним и тем же html-кодом каждый элемент данных, в частном случае, когда вы заранее знаете имена всех полей, которые будете выводить, этот шаблон можно сильно упростить:
<?php foreach ($rows as $count => $row) { print $row['field_name_1'] . "; " . $row['field_name_2']; }
Здесь нужно учитывать, что в качестве ключей массива $row нужно использовать имена соответствующих колонок с данными в БД, в случае с дефолтными полями это будут ключи типа nid, title, created, а в случае с данными, выбранными из CCK-полей нужно не забывать добавлять к именам приставку field_.
Список всех доступных в шаблоне полей можно вывести на экран вот так:
foreach ($rows as $count => $row) { $fields = array(); foreach ($row as $field => $content) { $fields[] = $field; } } print implode(", ", $fields);
Ссылки на другие части этой статьи:
- Часть 1. Введение
- Часть 2. Анатомия темы оформления
- Часть 3. Forms API и темизация
- Часть 4. Темизация Views
Содержание всех статей: http://romka.eu/blog/my-drupal-articles
14 Comments
с удовольствием, и вашей
Submitted by Anonymous (не проверено) on
с удовольствием, и вашей помощью постигаю друпал, вопрос такой как настоить "хлебные крошки" на сайте, если используется модуль вьюз.
Спасибо за хорошую серию статей
Submitted by Logicsun (не проверено) on
Прияно читай хороший материал о Друпал. Прродолжай в том же духе
Добавил к себе в закладки на сайте
Спасибо !
в последнем блоке кода нужно
Submitted by Сергей Клочко on
в последнем блоке кода нужно что-то исправить, иначе напечатается только последний $row. Надо делать так:
а в остальном - понравилось содержание подборки статей.
Где бы еще найти такую же
Submitted by Pumba (не проверено) on
Где бы еще найти такую же доходчивую информацию по темизации exposed фильтров во views?
Спасибо,
Submitted by Artu (не проверено) on
Указанный выше код подходит только под табличный стиль.
Где бы посмотреть пример для неформатированной или списочной вьюхи?
Стандартные файлы views печатают там всю строку сразу -<?php print $row; ?>,
а как разложить ее по полям?
Спасибо большое!
Submitted by Артем (не проверено) on
Спасибо за столь удобно изложенный материал! Устроился на работу - ваш сайт очень помог.
Группирование по двум полям.
Submitted by Anonymous (не проверено) on
Роман, благодарю за материал! Очень хорошо описано. Я вот создаю сайт и понадобилось сгруппировать результат запроса по двум полям. Задача -- расписание пар в университете. Нужно сгруппировать результат запроса сначала по дате, а потом -- по времени начала пары. Подскажите, пожалуйста, есть ли такой модуль, позволяющий группировать РЕЗУЛЬТАТЫ запроса не по одному, а по двум полям? Или нужно всё-таки писать свою темизацию? Или возможно вложить view во view и выкрутиться таким образом? Надеюсь на Вашу подсказку, а то я что-то запутался...
Еще про темизацию Views
Submitted by Вячеслав Докин on
Вот еще статья про темизацию Views Drupal views - пример создания страницы вида
Темизация views в модуле
Submitted by Anonymous (не проверено) on
Можно ли темизировать views в собственном модуле?
Огромное спасибо!
Submitted by Глеб (не проверено) on
Очень помогла ваша статья!
Спасибо!
Submitted by Anonymous (не проверено) on
Нигде этого не нашёл, кроме как у Вас, Роман! Огромное Вам спасибо! Удачи и миллион посетителей Вашему сайту!
Учусь сейчас на своем сайте
Submitted by Anonymous (не проверено) on
Учусь сейчас на своем сайте premusic.ru работать с ним
А как скажем мне поvtнять
Submitted by Алексей (не проверено) on
А как скажем мне поvtнять шаблон views-view-table.tpl.php для конкретного вида ??? Чтоб скажем для всех был один шаблон views-view-table.tpl.php, а для вида /user-article был другой шаблон views-view-table.tpl.php
Как сделать новости не на главной странице?
Submitted by Дмитрий (не проверено) on
Здравствуйте, Роман!
У меня в меню основных, есть ссылка "Новости", ведущая на одну из страниц сайта (не на главную!).
Я бы хотел настроить ярлычок RSS, чтобы он указывал не http://доменное-имя-сайта/?q=rss.xml, а скажем:
http://доменное-имя-сайта/?q=node/44/rss.xml
Чтобы у посетителей, подписавшихся на информацию с сайта компании, появлялись заметки со страницы наших новостей? Не хочется главную страницу превращать в "новостную ленту".
Заранее благодарен.