Работа с модулем views в Drupal. Теория и практика

Одним из самых полезных модулей Drupal для создания сайта, является модуль Views, кроме того, он так же является одним из самых сложных, и наверное самым большим (архив Drupal 6-12 весит около мегабайта, архив Views 6.x-2.6 весит полтора мегабайта).

Суть модуля проста, - он выводит данные в нужном нам виде, вывод можно настраивать по многим параметрам, и всячески преображать. Для начала модуль нужно скачать, и установить (это мы обсуждали в прошлых уроках). Активировать нужно 2 модуля (они идут в 1 архиве Views) Views и Views UI, первый выводит списки из базы так как вы задали, второй — это визуальная оболочка, с помощью которой создаются Views. После активации в меню «Administer → Site building» (Управление → Конструкция сайта) появится вкладка Views. Зайдем.

Здесь мы видим виды которые уже созданы по умолчанию, их может быть и больше в зависимости от установленных модулей. Эти виды неактивны, их можно включить с помощью ссылки «Enable», и использовать в своих целях. Но, !!МЫ!! как истинные «джедаи» попробуем сделать свой (пусть он и будет маленький, неказистый и неработающий). Кликаем по кнопке «Add».
Появляется первое меню создания вида.

Тут 2 обязательных поля: заголовок (название вида., вводить английские буквы в нижнем регистре), и тип вида (View type — это то откуда мы будем брать информацию для вывода). Напишем в заголовке first (ведь это наш первенец, не так ли?), а тип вида поставим «Материал» (Node), будем выводить материалы. Нажимаем «Next», и попадаем на страницу где мы будем задавать параметры вывода, первоначально она выглядит ужасно, но это только в первый раз.

тут можно создать несколько display (видов вывода, наиболее используемые это блок, и страница). Один display уже есть — default, если вы хотите создать несколько схожих дисплеев, то можно задать основные настройки в default, создаваемые display наследуют эти настройки. Если вы хотите что бы настройки у дисплея отличались от настроек Default, их нужно переназначить, для этого служит кнопка Override.

Давайте добавим блок.

Рассмотрим блок Fields, он является одним из основных, так как в нем мы выбираем какие поля (Fields) будет отображать в нашем виде.

На блоке вы видите 2 кнопки, первая служит для добавления поля, вторая для выставления полей в порядке нужном вам.
При нажатии на кнопку добавления поля, внизу отобразятся поля которые можно добавить, и выпадающий список сортировки. Если мы хотим добавить в вывод заголовки материалом, нам нужно выбрать Node: title, и нажать Add.

Появится меню Configure field, в котором мы можем задать Имя поля, с которым он будет выводиться, и проставить галочки:
Exclude from display: загружать поле, но не отображать.
Rewrite the output of this field: заменить вывод этого поля на свойтекст.
Output this field as a link: Выводимый текст можно сделать ссылкой.
Trim this field to a maximum length: можно указать максимальный размер текста, остальное обрежется.
Link this field to its node: запись будет ссылкой, в зависимости от поля, адрес ссылки меняется.

Остановимся поподробнее на блоке «Basic settings», здесь собраны основные свойства нашего вида. При нажатии какого либо свойства внизу появляется панель редактирования.

Обсудим основные свойства:
Name: имя дисплея, можно не менять, но когда дисплеев много, помогает не запутаться.
Title: Заголовок дисплея (в нашем случае заголовок блока, по умолчанию).
Style: Стиль вывода. Очень важное свойство, определяет как будет выводиться ваш вид. Всего 4 варианта (если не добавлять модули):
Grid — даные выводятся «решеткой», можно задать количество столбцов, выравнивание (по горизонтали/вертикали) и нужно ли группировать по какому либо полю.

на рисунке выводятся заголовки страниц, Style: Greed, Grouping field: None, Number of columns: 4, Alignment:Horizontal.
HTML list: обычный HTML список, из свойств Grouping field (аналогичен тому что в Greed), и List type (Unordered- обычный, Ordered — нумерованный)

те же самые заголовки, но Style: HTML list, List type: Ordered.
Unformatted — данные выводятся без форматирования, есть возможность их сгрупировать.

Style: Unformatted

Table: поля (field) выводятся в столбцах таблицы, можно задать сортировку по любому полю.


выведены 2 поля: заголовок материала, и дата публикации, сортируется по дате публикации. Style: Table, Default sort order: Descending (нисходящая).

Use AJAX: использовать ли AJAX для вывода вида. Если, например, используется постраничный вывод, то переход между страницами будет происходить без перезагрузки страницы.
Use pager: Выводить ли данные постранично, страницы можно показывать 2 способоми: Full (1 2 3 4 следующая › последняя ») и Mini (1 of 4 ››), свойство Pager element вам понадобится при использовании нескольких pager в одном виде.
Items per page: Сколько записей выводить на 1 странице.
Distinct: если включить, то будут отображаться только уникальные записи.
Access: задает доступ к виду, Role — только пользователям с определенной ролью, Permission (Право доступа) — только пользователям с определенным правом доступа (User management → Permission).
Caching: будет ли кешироваться блок.
Header, Footer: здесь можно вставить текст который будет до нашего блока, и после, возможна вставка HTML.
Empty text: этот текст выведется в том случае, если вид не вернет записей.
Theme: можно задать стилю какой темы будет соответствовать наш блок.

Блок Sort criteria: по любому полю можно задать сортировку по возрастанию или убыванию.

Блок Filters служит для задания фильтров вывода. Например можно вывести только те записи, у которых id меньше 5, или Node: Type равен «Blog entry».

Модуль Views очень обширен, мы рассмотрели основы, остальное я надеюсь вы разберете сами. Теперь давайте от теории перейдем к практике, выполните несколько заданий (ниже я приведу решение, но желательно что бы вы справились сами):

1.Создайте страницу в которой будут выводиться последние 5 комментариев (автор, текст обрезаный до 20 символов, и дата публикации).
2.Создайте RSS-поток который будет выводить данные из предыдущего дисплея(возможно тут возникнут некоторые проблемы, но я в вас верю).
3.С помощью модуля calendar, создайте блок с календарем, что бы по клику на даты выводились записи из блога за эту дату.

Первая задача.

1.Создаем вид с View type: Comment, назовем его last_comments.

2.В только что созданном виде создаем дисплей типа page

3.Добавим 3 поля: Автор комментария (Comment: Author), текст (Comment: Body), и дату создания (Comment: Post date).

4.настроим поле Автор. Удалим Label, и зделаем имя ссылкой на домашнюю страницу.

5.Настроим Body, удалим Label, и поставим обрезку до 20 символов.

6.У даты удалим Label.
7.Сохраним дату (1), и сохраним весь вид(2)


8.Зададим количество комментариев Items to display: 5.

9.Поставим Style: Table, сортировку по дате на понижение.


10. Последнее что нужно сделать, это задать путь (я вбил «comm»), и сохранить,


если все сделано правильно, то по ссылке ваш_сайт/comm будет доступна наша страница.

Вторая задача.
1.дисплей у нас уже настроен, нужно только прикрутить к нему RSS. Заходим в на вид last_comments. И создаем новый дисплей Feed.

2.Изменяем Row style:на Comment.

3.Вбиваем путь (Path) по которому будет располагаться наш RSS. Я поставил «rsscomm»

4.Присоединяем RSS-поток к дисплею Page.

5. Сохраняемся.

6.Заходим на страницу нашего вида, если все было сделано правильно, внизу появится значек RSS.

При клике на который появится сам RSS-поток, в Opere он выглядит так:

Самый трудный пример, и самый последний (ну наконец то)
1.Первоначально нам нужно скачать дополнительный модуль и установить его, который в свою очередь требует модули Date Api и Date timezone, скачиваем и устанавливаем их.

2.Создаем новый вид, цепляем его к Node.

3.Создаем дисплей Block.

4.Свойство Style: выставляем равным Calendar (Этот стиль появился у нас после установки модуля Calendar).

5.Добавляем аргумент Date: Date (node).

6.На с транице редактирования аргумента устнавливаем галочки Provide default argument,Current date, Month, Node: Post date.

7.Добавляем поля Node: Post date, и Node: Title, у первого выставляем Date format в Custom, Label удаляем. У второго ставим галочку Exclude from display.
8.В блоке Filters добавляем параметр Node: Type, и высталяем параметр Is one of — Blog Entry

9.Все сохраняем, выводим блок, должно получиться так

Не очень красиво, но работает, внешний вид — это тема для другого урока. Но пока ничего не выводит. Почему? Потому что нужно создать вид Page на котором будут выводиться выбранные материалы. Собираем волю в кулак, осталось совсем чуть чуть.

1.В этом же виде создаем дисплей Page.
2.В Page settings ставим Path: callendar/% (% - это то место куда наш блок будет подставлять дату, что бы Page знал данные за какую дату отображать)

3.Переопределяем (кнопочка Override) у Page аргумент Date: Date (node) Node: Post date, меняем Month на Day (что бы на страничке выводился только один день).

4.В блоке Fields переопределяем Node: Title, убираем галочку Exclude from display, и ставим Link this field to its node, что бы заголовки отображались, и были ссылкой на материал.
5.Сохраняем. Пробуем. Теперь при клике по соответствующей дате будут выведены записи блога созданные в тот день. Вы можете изменить параметр Style у дисплея Page, пробуйте и у вас получится. А как темизировать виды, я рас кажу вам как нибудь потом)

На этом урок по созданию сайта на Drupal закончен. Но не законченны уроки -)
Спасибо за внимание -)

Перепечатка и использование возможны только с пиьменного разрешения автора.

3358