Ромка!eu

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

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

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

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

426
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
  • -8 points

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

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

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

  • ответить
  • quote
  • -9 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
  • -23 points

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

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

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

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

Спасибо,

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

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

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

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

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

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

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

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

Группирование по двум полям.

Anonymous (не проверено) → Пнд, 11/15/2010 - 18:13

Роман, благодарю за материал! Очень хорошо описано. Я вот создаю сайт и понадобилось сгруппировать результат запроса по двум полям. Задача -- расписание пар в университете. Нужно сгруппировать результат запроса сначала по дате, а потом -- по времени начала пары. Подскажите, пожалуйста, есть ли такой модуль, позволяющий группировать РЕЗУЛЬТАТЫ запроса не по одному, а по двум полям? Или нужно всё-таки писать свою темизацию? Или возможно вложить view во view и выкрутиться таким образом? Надеюсь на Вашу подсказку, а то я что-то запутался...

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

Еще про темизацию Views

Вячеслав Докин → Чт, 11/18/2010 - 03:32

Вот еще статья про темизацию Views Drupal views - пример создания страницы вида

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

Темизация views в модуле

Anonymous (не проверено) → Чт, 12/30/2010 - 15:58

Можно ли темизировать views в собственном модуле?

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

Огромное спасибо!

Глеб (не проверено) → Втр, 02/22/2011 - 20:15

Очень помогла ваша статья!

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

Спасибо!

Anonymous (не проверено) → Вс, 04/03/2011 - 18:06

Нигде этого не нашёл, кроме как у Вас, Роман! Огромное Вам спасибо! Удачи и миллион посетителей Вашему сайту!

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

Учусь сейчас на своем сайте

Anonymous (не проверено) → Ср, 08/03/2011 - 12:20

Учусь сейчас на своем сайте premusic.ru работать с ним

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

А как скажем мне поvtнять

Алексей (не проверено) → Втр, 08/09/2011 - 12:23

А как скажем мне поvtнять шаблон views-view-table.tpl.php для конкретного вида ??? Чтоб скажем для всех был один шаблон views-view-table.tpl.php, а для вида /user-article был другой шаблон views-view-table.tpl.php

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

Как сделать новости не на главной странице?

Дмитрий (не проверено) → Пт, 11/18/2011 - 12:29

Здравствуйте, Роман!
У меня в меню основных, есть ссылка "Новости", ведущая на одну из страниц сайта (не на главную!).
Я бы хотел настроить ярлычок RSS, чтобы он указывал не http://доменное-имя-сайта/?q=rss.xml, а скажем:
http://доменное-имя-сайта/?q=node/44/rss.xml
Чтобы у посетителей, подписавшихся на информацию с сайта компании, появлялись заметки со страницы наших новостей? Не хочется главную страницу превращать в "новостную ленту".
Заранее благодарен.

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

Отлично!

Антон (не проверено) → Пнд, 01/23/2012 - 20:29

Сделал, как предлагается в статье и получилось обернуть вывод вьюшек в нужные дивы. Спасибо, отличная статья!

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

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

Содержание этого поля является приватным и не предназначено к показу.
  • Доступны 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
Если вы человек, а не робот, то введите текст с картинки. Если вы робот, то велкам ту майкрософт.ком.

Обо мне

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

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

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

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

  • Пример разработки плагина для модуля CCK
  • AJAX. Обмен данными между клиентом и сервером, закачка на сервер файлов без перезагрузки страницы при помощи библиотеки jQuery.
  • Модуль Vote Up/Down для Drupal 6
  • Темизация Drupal. Часть 1
  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Кнопки Home, End и Page Up, Page Down в Mac OS
  • Темизация Drupal. Часть 3. Основы Drupal Forms API и темизация форм
  • Вращение изображений при помощи Javascript
  • Разработка сайта на Drupal. Часть 4. Пример разработки корпоративного интранет-сайта на Drupal

Подписка


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

  • Oz → Швабрашвабр2 → слабовато для
  • loan → Вращение изображений при помощи Javascript → answer this topic
  • CopelandLacey33 → Доставка → reply this post
  • vitsss → Авторизация на Drupal-сайте с помощью аккаунта вКонтакте → hostinh nic.ru and vk api
  • dimasikov → Автоматическая "газетная" верстка (верстка в несколько колонок) → Я похожее делал для с этим
  • max2012 → Разработка сайта на Drupal. Часть 2. Архитектура Drupal. → Подвесные потолки Опосля
  • Антон → Темизация Drupal. Часть 4. Темизация Views → Отлично!
  • Itsmypersonal → Зима 2010. Поездка в Тайланд, Индонезию и Сингапур. Часть 2 — Пхукет → Пхукет - да!
  • Sheldon → Перетаскивание ячеек таблицы. Table drag and drop — плагин для jQuery → Здравствуйте! Подскажите
  • Sheldon → Home sheep home → Одна из тех игр в которые

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

  • Проба пера в HTML5 + canvas. Эффект ластика
  • Шесть рукопожатий
  • Доклад на DrupalConfMoscow 2011
  • Статусы разных сущностей в Друпале 6
  • Футер, прибитый к низу страницы
  • Путешествие по Перу и Боливии. Часть 2
  • Путешествие по Перу и Боливии. Часть 1
  • Несколько панорам из путешествия по Перу и Боливии
  • Авторизация на Drupal-сайте с помощью аккаунта ВКонтакте
  • Home sheep home

Тэги

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

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

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

Навигация

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

Курсы валют

  • 100 Казахских тенге — 20,3352 (+0.03)
  • 10 Украинских гривен — 37,6101 (+0.06)
  • 10 Китайских юаней — 47,9611 (+0.04)
  • 100 Японских иен — 39,6909 (-0.04)
  • 1 Доллар США — 30,2385 (+0.05)
  • 1 Евро — 39,7425 (-0.02)
  • 10000 Белорусских рублей — 35,9554 (-0.07)
  • 1 Турецкая лира — 17,1829 (-0.03)

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

  • Backup-manager — настройка резервного копирования Linux-сервера на Amazon S3 за 5 минут
  • Путешествие по Перу и Боливии. Часть 2
  • mini.romka.eu — версия этого сайта для КПК
  • Куба, остров Святой Марии.
  • Невероятный битбокс от Dub FX и Woodnote
  • Осло
  • Проба пера в HTML5 + canvas. Эффект ластика
  • Темизация Drupal. Часть 2. Анатомия темы оформления Drupal
  • Статья в журнале PC Magazine
  • В Политехническом музее

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

Замок Акерхус вечером
Я и кокос... Где то я это уже видел...
Просто море
Я и разноцветные рыбы
Копенгаген, Кристиания, Граффити 3
Это я по дороге из Буканеро в Баракоа
Эль Ничо. На фоне я.
Собака
Еще одно фото замка
Местный ходок
В Сингапурском зоопарке. Попугай
Дорога, на поверхности видны следы копыт
В Сингапурском зоопарке. Леопардовая (бенгальская) кошка.
Копенгаген, Кристиания, Граффити 4
Дом, плавающий по морю на больших поплавках
Старая и новая наши машины — пыжик и сузуки джимни
  • Отдых
  • Работа

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