Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Views contextual filters, relationships - аргументы и отношения (связи)

28/11/2019, by Ivan

В этом уроке я уделю особое внимание работе с аргументами во Views. Аргументами называются части URL, например:

node/15
Первый аргумент будет node, второй 15.
taxonomy/term/10
Первый аргумент taxonomy, второй term, третий 10.
user/67
Первый аргумент user, второй 67

Я думаю что эти примеры наглядные и не требуют дополнительных пояснений.

Аргументы можно получить с помощью функции arg()

<?php
print arg(0) . '<br />';
print arg(1);
?>

Если URL был node/15, то будет выведены:

node
15

Нумерация аргументов в функции arg начинается с 0. А теперь давайте посмотрим, какие готовые решения есть в модуле Views.

Вывод нод пользователя

Допустим мы находимся на странице user/1 и нам нужно вывести блок нод пользователя с uid = 1. Для этого мы будем использовать аргумент из URL.

Добавляем новый вид.Выводим блок, в полях указываем title ноды, естественно выводим только опубликованные ноды, сортируем по post date

 

Заголовок
Заголовок: user_nodes
Формат
Формат: Unformatted list | Настройки
Показать: Fields | Настройки
Fields
Содержимое: Заголовок
Filter criteria
Содержимое: Опубликовано (Да)
Sort criteria
Содержимое: Post date (desc)
Pager
Use pager: Display a specified number of items | 15 пунктов
More link: Нет

Теперь нажмем добавить в Contextual fitlers (arguments, аргументы, контекстные фильтры). Выбираем:
Содержимое: Author uid

И дальше выбираем

When the filter value is NOT available
  Provide default value
    User ID from URL
      Provide default value

Views contextual filters

Сохраняем вид. Выводим блок в нужный нам регион и заходим например на страницу user/1 и в созданном нами блоке будут выведены все ноды пользователя с uid = 1.

Вывод связанных нод

А сейчас мы усложним пример. Допустим нам нужно привязать к одной ноде несколько других. Для этого используются поля node reference. Чтобы использовать эти поля связей, нам потребуется модуль References и его подмодуль node references.

http://drupal.org/project/references

Поля связей в 7ом друпале позволяют привязать к одной ноде несколько пользователей и несколько нод одновременно. Реализуется это через поля типа node reference. А так как в Друпал 7 можно добавлять поля к любой сущности, то и связывать теперь можно любые сущности.

У меня на сайте есть 4 новости и я хочу сделать привязать ко второй новости первую и третью, допустим эти новости на схожую тематику.

Заходим в управление полями контент типа новости и добавляем поле node reference с возможностью автозаполнения. Назову поле "схожие новости". Дальше выбираем какие контент типы могут иметь связи с нодой, а также ставим количество выбираемых нод для поля. Я выбрал только новости. Дальше нажимаем сохранить поле. Теперь заходим в редактирование второй ноды. Там у меня поле node reference схожие новости.

Drupal reference field

Конечно новости уже будут отображаться в виде списка, как связанные с этой нодой. Но наша задача настроить view.
Добавляем новый view, опять же в виде блока.

Заголовок:
similar_news
Формат:
Unformatted list | Настройки
Показать: Fields | Настройки
Fields
Содержимое: Заголовок
Filter criteria
Содержимое: Опубликовано (Да)
Содержимое: Тип (= Новость)
Sort criteria
Содержимое: Post date (desc)
Pager
Use pager: Display a specified number of items | 5 пунктов

Добавляем аргумент (contexual filter) Содержимое: Nid. Но в этот раз выбираем

When the filter value is NOT available
  Provide default value
    Content ID from URL

А также в Relationships (отношения, связи) добавляем новую связь Содержимое: Схожие новости (field_similar)  (Если у вас поле называется по другому, то следует выбирать его). Также обратите внимание, что там есть тоже самое поле но с пометкой reverse. Это означает, что будет обратная связь, то есть если мы на странице с новостью 3, то будет показана в блоке новость 2 (Хотя мы выбирали в Новости 2 связь с Новость 1 и Новость 3).

В результате будут выбраны еще и эти поля:

Contextual filters
Содержимое: Nid
Relationships
Содержимое: Схожие новости

Теперь в нашем поле содержимом нужно поставить relation, вместо Do not use a relationship выберите имя нашей связи.
Fields
(field_similar) Содержимое: Заголовок

Сохраняем наш view и блок вставляем в нужный регион.

Теперь на страницы новости 2, будут в отдельном блоки отображаться схожие новости Новость 1 и Новость 3.