Ромка!eu

  • Отдых
  • Работа
Главная — Блоги — Ромка's blog

Это старая (Drupal 6) версия сайта romka.eu. Она больше не обновляется, комментирование материалов отключено. Обновленная версия сайта доступна по адресу http://romka.eu.

Темизация 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:

  1. <table class="<?php print $class; ?>">
  2.   <?php if (!empty($title)) : ?>
  3.     <caption><?php print $title; ?></caption>
  4.   <?php endif; ?>
  5.   <thead>
  6.     <tr>
  7.       <?php foreach ($header as $field => $label): ?>
  8.         <th class="views-field views-field-<?php print $fields[$field]; ?>">
  9.           <?php print $label; ?>
  10.         </th>
  11.       <?php endforeach; ?>
  12.     </tr>
  13.   </thead>
  14.   <tbody>
  15.     <?php foreach ($rows as $count => $row): ?>
  16.       <tr class="<?php print implode(' ', $row_classes[$count]); ?>">
  17.         <?php foreach ($row as $field => $content): ?>
  18.           <td class="views-field views-field-<?php print $fields[$field]; ?>">
  19.             <?php print $content; ?>
  20.           </td>
  21.         <?php endforeach; ?>
  22.       </tr>
  23.     <?php endforeach; ?>
  24.   </tbody>
  25. </table>

Первые 14 строк этого шаблона выводят заголовок страницы и таблицы с данными, а самая интересная и важная часть шаблона сосредоточена в строках с 15 по 23 — здесь в цикле выводятся данные, выбранные запросом, заданным в настройках представления. Данные возвращаются в виде рекордсета, то есть структуры данных, которую можно представить как таблицу, строками которой являются выбранные объекты (например ноды), а ячейками — значения полей объекта (например поля "заголовок" или "автор" ноды).

Вот этот же кусок шаблона с комментариями:

  1. // Цикл по объекту $rows, содержащему все возвращенные данные
  2. // $row — одна строка
  3. <?php foreach ($rows as $count => $row): ?>
  4.   <tr class="<?php print implode(' ', $row_classes[$count]); ?>">
  5.     // Цикл по всем ячейкам внутри строки
  6.     // $field — имя поля, например nid, title и т.д.
  7.     // $content — значение поля
  8.     <?php foreach ($row as $field => $content): ?>
  9.       <td class="views-field views-field-<?php print $fields[$field]; ?>">
  10.         <?php print $content; ?>
  11.       </td>
  12.     <?php endforeach; ?>
  13.   </tr>
  14. <?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

  • Drupal
  • Views
  • статья
  • темизация
  • Ромка's blog

с удовольствием, и вашей

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
Чтобы у посетителей, подписавшихся на информацию с сайта компании, появлялись заметки со страницы наших новостей? Не хочется главную страницу превращать в "новостную ленту".
Заранее благодарен.

Обо мне

Всем привет!
Меня зовут
Роман Архаров, я профессиональный веб-разработчик, программирую на языках PHP, Python и Action-Script, в работе использую фреймворки Drupal и Django. В этом блоге я размещаю заметки и статьи, связанные с моей работой, отдыхом и другими интересными мне темами.

Похожие заметки

  • Несколько статей о Друпале
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Темизация Drupal. Часть 1
  • Пример разработки плагина для модуля CCK
  • Разработка модуля для Drupal. Часть2

Популярные заметки

  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Перетаскивание строк таблицы. Table drag and drop — плагин для jQuery
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Темизация Drupal. Часть 4. Темизация Views
  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Тестирование модуля "Inner poll"
  • Несколько панорам из путешествия по Перу и Боливии
  • Arduino + bluetooth, небольшая проблема
  • Пример разработки плагина для модуля CCK

Подписка


Последние комментарии

  • drupal-admin → Кеширование на Drupal-сайте. Сравнение эффективности встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Var → Отличная статья
  • Меховщиков Руслана → Проверка имени пользователя на наличие букв из разных алфавитов → Re: Читал про это уже на
  • Вероника → Куба. Лето 2008. Часть 3 → По поводу "приветливых жителей" Тринидада
  • Sfero → Статья в PC Magazine/RE. Drupal: разработка модуля → Немного о контенте
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • Ромка → Статья в PC Magazine/RE. Drupal: разработка модуля → Да, будет сборка, та которую
  • RemaGe → Статья в PC Magazine/RE. Drupal: разработка модуля → -)
  • anatinge → Поездка в Киев → спасибо :)
  • Ромка → Поездка в Киев → Да, в общем-то, ничего
  • GogA → Поездка в Киев → Заинтриговал, что там за

Новые заметки

  • Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish
  • Любопытное поведение модуля syslog в шестом Друпале (баг?)
  • Arduino + bluetooth, небольшая проблема
  • Гугл 1 марта прекратил поддержку сервиса Google Friend Connect
  • Проба пера в HTML5 + canvas. Эффект ластика
  • Шесть рукопожатий
  • Доклад на DrupalConfMoscow 2011
  • Статусы разных сущностей в Друпале 6
  • Футер, прибитый к низу страницы
  • Путешествие по Перу и Боливии. Часть 2

Тэги

Drupal jquery Куба Лето 2007 Лето 2008 Отдых Работа Штуки-дрюки лето модуль статья цитата
еще тэги

Навигация

  • Exchange rate
  • Переход по внешней ссылке
  • Последние сообщения
  • Фотогалереи

Курсы валют

  • 100 Казахстанских тенге — 21,3687 (-0.43)
  • 10 Украинских гривен — 27,2852 (-13.04)
  • 1 Китайский юань — 10,2706 (-40.98)
  • 100 Японских иен — 53,5332 (+12.67)
  • 1 Доллар США — 65,6210 (+33)
  • 1 Евро — 69,8076 (+29.42)
  • 10000 Белорусских рублей — 36,3310 (-2.51)
  • 1 Турецкая лира — 22,9540 (+4.99)

10 случайных заметок

  • Гугл 1 марта прекратил поддержку сервиса Google Friend Connect
  • Несколько статей о Друпале
  • Разработал модуль "Адаптивное меню" для Drupal 6
  • Еще одна очень меткая картинка
  • Проверка имени пользователя на наличие букв из разных алфавитов
  • Поездка в Киев
  • Новый дизайн для Швабрашвабр
  • Новый год 2008. Часть 3. Гётеборг.
  • Разработка сайта Drupal.ru
  • Новый год 2009. Амстердам, Гаага, Роттердам и Кёльн

Случайные фото

Еще одно фото замка
Я на
Горы
Сочи ночью
Парашютист в Варадеро
Я с каким-то дядькой читаю газету
Дорога, на поверхности видны следы копыт
В Сингапурском зоопарке. Будда?
Автописта
Экзотическое меню в аэропорту :))
Я и бамбук
Я и мой автопарк :))
Вид на Осло из замка Акерхус
Замок Акерхус вечером
Эль Ничо. На фоне я.
Я и моя тень
  • Отдых
  • Работа

При использовании материалов с сайта, пожалуйста, ставьте ссылку на источник. E-mail для связи: mne@romka.eu.