Темизация 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:
- <?php endif; ?>
- <thead>
- <tr>
- <?php foreach ($header as $field => $label): ?>
- </th>
- <?php endforeach; ?>
- </tr>
- </thead>
- <tbody>
- <?php foreach ($rows as $count => $row): ?>
- <?php foreach ($row as $field => $content): ?>
- </td>
- <?php endforeach; ?>
- </tr>
- <?php endforeach; ?>
- </tbody>
- </table>
Первые 14 строк этого шаблона выводят заголовок страницы и таблицы с данными, а самая интересная и важная часть шаблона сосредоточена в строках с 15 по 23 — здесь в цикле выводятся данные, выбранные запросом, заданным в настройках представления. Данные возвращаются в виде рекордсета, то есть структуры данных, которую можно представить как таблицу, строками которой являются выбранные объекты (например ноды), а ячейками — значения полей объекта (например поля "заголовок" или "автор" ноды).
Вот этот же кусок шаблона с комментариями:
- // Цикл по объекту $rows, содержащему все возвращенные данные
- // $row — одна строка
- <?php foreach ($rows as $count => $row): ?>
- // Цикл по всем ячейкам внутри строки
- // $field — имя поля, например nid, title и т.д.
- // $content — значение поля
- <?php foreach ($row as $field => $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_.
Список всех доступных в шаблоне полей можно вывести на экран вот так:
<?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);
}
?>
а в остальном - понравилось содержание подборки статей.
Отправить комментарий