Темизация Drupal. Часть 4. Темизация Views
Ромка — Вс, 01/03/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; ?>">
- <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]; ?>">
- </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]; ?>">
- </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]; ?>">
- </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_.
Список всех доступных в шаблоне полей можно вывести на экран вот так:
<?php
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
с удовольствием, и вашей
Anonymous (не проверено) → Пнд, 02/01/2010 - 16:13с удовольствием, и вашей помощью постигаю друпал, вопрос такой как настоить "хлебные крошки" на сайте, если используется модуль вьюз.
Спасибо за хорошую серию статей
Logicsun (не проверено) → Втр, 02/09/2010 - 00:22Прияно читай хороший материал о Друпал. Прродолжай в том же духе
Добавил к себе в закладки на сайте
Спасибо !
в последнем блоке кода нужно
Сергей Клочко → Втр, 02/09/2010 - 01:05в последнем блоке кода нужно что-то исправить, иначе напечатается только последний $row. Надо делать так:
<?php
foreach ($rows as $count => $row) {
$fields = array();
foreach ($row as $field => $content) {
$fields[] = $field;
}
print implode(", ", $fields);
}
?>
а в остальном - понравилось содержание подборки статей.
Где бы еще найти такую же
Pumba (не проверено) → Сб, 06/12/2010 - 19:54Где бы еще найти такую же доходчивую информацию по темизации exposed фильтров во views?
Спасибо,
Artu (не проверено) → Ср, 09/01/2010 - 08:31Указанный выше код подходит только под табличный стиль.
Где бы посмотреть пример для неформатированной или списочной вьюхи?
Стандартные файлы views печатают там всю строку сразу -<?php print $row; ?>,
а как разложить ее по полям?
Спасибо большое!
Артем (не проверено) → Чт, 09/02/2010 - 23:06Спасибо за столь удобно изложенный материал! Устроился на работу - ваш сайт очень помог.
Группирование по двум полям.
Anonymous (не проверено) → Пнд, 11/15/2010 - 18:13Роман, благодарю за материал! Очень хорошо описано. Я вот создаю сайт и понадобилось сгруппировать результат запроса по двум полям. Задача -- расписание пар в университете. Нужно сгруппировать результат запроса сначала по дате, а потом -- по времени начала пары. Подскажите, пожалуйста, есть ли такой модуль, позволяющий группировать РЕЗУЛЬТАТЫ запроса не по одному, а по двум полям? Или нужно всё-таки писать свою темизацию? Или возможно вложить view во view и выкрутиться таким образом? Надеюсь на Вашу подсказку, а то я что-то запутался...
Еще про темизацию Views
Вячеслав Докин → Чт, 11/18/2010 - 03:32Вот еще статья про темизацию Views Drupal views - пример создания страницы вида
Темизация views в модуле
Anonymous (не проверено) → Чт, 12/30/2010 - 15:58Можно ли темизировать views в собственном модуле?
Огромное спасибо!
Глеб (не проверено) → Втр, 02/22/2011 - 20:15Очень помогла ваша статья!
Спасибо!
Anonymous (не проверено) → Вс, 04/03/2011 - 18:06Нигде этого не нашёл, кроме как у Вас, Роман! Огромное Вам спасибо! Удачи и миллион посетителей Вашему сайту!
Учусь сейчас на своем сайте
Anonymous (не проверено) → Ср, 08/03/2011 - 12:20Учусь сейчас на своем сайте premusic.ru работать с ним
А как скажем мне поvtнять
Алексей (не проверено) → Втр, 08/09/2011 - 12:23А как скажем мне поvtнять шаблон views-view-table.tpl.php для конкретного вида ??? Чтоб скажем для всех был один шаблон views-view-table.tpl.php, а для вида /user-article был другой шаблон views-view-table.tpl.php
Как сделать новости не на главной странице?
Дмитрий (не проверено) → Пт, 11/18/2011 - 12:29Здравствуйте, Роман!
У меня в меню основных, есть ссылка "Новости", ведущая на одну из страниц сайта (не на главную!).
Я бы хотел настроить ярлычок RSS, чтобы он указывал не http://доменное-имя-сайта/?q=rss.xml, а скажем:
http://доменное-имя-сайта/?q=node/44/rss.xml
Чтобы у посетителей, подписавшихся на информацию с сайта компании, появлялись заметки со страницы наших новостей? Не хочется главную страницу превращать в "новостную ленту".
Заранее благодарен.