Ромка!eu

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

Темизация Drupal. Часть 4. Темизация Views

  • Просмотреть
  • Голоса

Ромка — Вс, 01/03/2010 - 23:09

161
points

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
  • Quote

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

Anonymous (не проверено) → Пнд, 02/01/2010 - 16:13

с удовольствием, и вашей помощью постигаю друпал, вопрос такой как настоить "хлебные крошки" на сайте, если используется модуль вьюз.

  • ответить
  • quote
  • 4 points

Спасибо за хорошую серию статей

Logicsun (не проверено) → Втр, 02/09/2010 - 00:22

Прияно читай хороший материал о Друпал. Прродолжай в том же духе
Добавил к себе в закладки на сайте
Спасибо !

  • ответить
  • quote
  • 7 points

в последнем блоке кода нужно

Сергей Клочко → Втр, 02/09/2010 - 01:05

в последнем блоке кода нужно что-то исправить, иначе напечатается только последний $row. Надо делать так:


<?php
    
foreach ($rows as $count => $row) {
     
$fields = array();
     foreach (
$row as $field => $content) {
        
$fields[] = $field;
     }
     print 
implode(", ", $fields);
    }
?>

а в остальном - понравилось содержание подборки статей.

  • ответить
  • quote
  • 0 points

Где бы еще найти такую же

Pumba (не проверено) → Сб, 06/12/2010 - 19:54

Где бы еще найти такую же доходчивую информацию по темизации exposed фильтров во views?

  • ответить
  • quote
  • 0 points

Спасибо,

Artu (не проверено) → Ср, 09/01/2010 - 08:31

Указанный выше код подходит только под табличный стиль.
Где бы посмотреть пример для неформатированной или списочной вьюхи?

Стандартные файлы views печатают там всю строку сразу -<?php print $row; ?>,
а как разложить ее по полям?

  • ответить
  • quote
  • -2 points

Спасибо большое!

Артем (не проверено) → Чт, 09/02/2010 - 23:06

Спасибо за столь удобно изложенный материал! Устроился на работу - ваш сайт очень помог.

  • ответить
  • quote
  • 1 point

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Вы можете использовать тэг <code></code> для подсветки синтаксиса программного кода. The supported tag styles are: <foo>, [foo].
  • You may quote other posts using [quote] tags.

Подробнее о форматировании

CAPTCHA
Если вы человек, а не робот, то введите текст с картинки. Если вы робот, то велкам ту майкрософт.ком.
Image CAPTCHA
Enter the characters shown in the image.

Обо мне

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

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

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

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

  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Темизация Drupal. Часть 4. Темизация Views
  • Темизация Drupal. Часть 1
  • Несколько статей о Друпале
  • Тестирование модуля "Inner poll"
  • Автоматическая "газетная" верстка (верстка в несколько колонок)
  • Разработка сайта на Drupal. Часть 3. Модули Drupal.
  • Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм

Подписка


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

  • Артем → Темизация Drupal. Часть 4. Темизация Views → Спасибо большое!
  • Anonymous → Темизация Drupal. Часть 2. Анатомия темы оформления Drupal → Большое спасибо автору за
  • Yor Ik → Авторизация на Drupal-сайте с помощью аккаунта вКонтакте → при входе на сайте
  • Химик → Home sheep home → Игра просто поглатитель времени
  • Artu → Темизация Drupal. Часть 4. Темизация Views → Спасибо,
  • icemen → Разработка модуля для Drupal. Часть2 → Благодарности
  • Федор → Проверка имени пользователя на наличие букв из разных алфавитов → . . . . . . . . . . . . . . .
  • oZEROth2008 → Авторизация на Drupal-сайте с помощью аккаунта вКонтакте → ответьте на мой вопрос
  • witalikm → Drupal for Firebug → После вашего совета пробовал
  • Shu → Drupal for Firebug → F12

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

  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Home sheep home
  • Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 3 — Бали, Сингапур, Пхукет
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 2 — Джокьякарта
  • Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 1 — Пхукет и Джакарта
  • Шпаргалка по командам и хоткеям Unix
  • Семинар по хапкидо в Днепропетровске
  • О планах
  • Несколько статей о Друпале

Тэги

dckyiev09 Drupal jquery Индонезия Отдых Работа Штуки-дрюки зима зима 2010 модуль статья темизация
еще тэги

Вход для пользователей

Что такое OpenID?
  • Войти по OpenID
  • Скрыть вход по OpenID
  • Зарегистрироваться
  • Запросить новый пароль

Навигация

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

Курсы валют

  • 100 Казахских тенге — 20,8329 (-0.09)
  • 10 Украинских гривен — 38,8969 (-0.14)
  • 10 Китайских юаней — 45,0421 (-0.17)
  • 100 Японских иен — 36,4634 (-0.11)
  • 1 Доллар США — 30,6858 (-0.11)
  • 1 Евро — 39,2901 (+0.12)
  • 1000 Белорусских рублей — 10,1743 (-0.04)
  • 1 Турецкая лира — 20,2279 (0)

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

  • Статья в PC Magazine/RE 11.2009: темизация Drupal
  • Cinnamon Chasers - Luv Deluxe (Music Video)
  • Начинающий автор
  • Семинар по хапкидо в Днепропетровске
  • Эксперименты с вКонтакте API
  • Отладка CSS. Расширения Firebug, View formatted Source и Web Developer для Firefox
  • Новый год 2008. Часть 1
  • Небольшой отчет о прошедшем первом Российском семинаре по CMS Drupal
  • Тестовое письмо из Копенгагена.
  • О планах

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

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

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