[Решено] Сводный отчет на views по нодам, связанным через Node reference

Главные вкладки

Аватар пользователя iVor iVor 3 сентября 2017 в 18:14

Всем привет!
На разрабатываемом сайте есть следующая структура

  1. Нода типа "Статья"
  2. Нода типа "Источник", связанная со статьёй ссылкой типа Node reference
  3. Словарь таксономии, классифицирующий источники по типу (в нём 7 терминов, обозначающих типы) Ссылка на термин указана в Источнике

Задача:
Сформировать таблицу (отчет), в которой было бы 8 колонок:

  • Ссылка на статью
  • Дата создания связанного источника с типом 1
  • Дата создания связанного источника с типом 2
  • Дата создания связанного источника с типом 3
  • Дата создания связанного источника с типом 4
  • Дата создания связанного источника с типом 5
  • Дата создания связанного источника с типом 6
  • Дата создания связанного источника с типом 7

С каждой статьёй может быть связано несколько источников, но интересует один - самый "свежий". Если ни одного источника определенного типа нет - поле для этого типа напротив статьи остается пустым.

Пытаюсь построить такое с помощью Views, но не могу найти в нём возможности прицепить несколько связанных нод по ссылкам Node Reference, профильтрованных по термину таксономии, указанному в них. Пробовал сделать собственный хэндлер по примерам из гитхаба - не смог понять как заставить его агрегировать (пример с Views API v2 не завелся вообще, v3 поле видит, но не возвращает данные).

Пробовал допилить Nodereference Count, чтобы он а) фильтровал и б) хранил даты в соответствующих полях, но не осилил. Да и идея хранить данные по связанным сущностям во внутренних полях ноды выглядит избыточной - хочется формирования на лету.

Писать свой модуль не хочется, т.к. в дальнейшем эту таблицу надо будет расширять, модифицировать, а данные из неё выгружать в Excel.

Подскажите, как эту задачу можно решать на Views?

Лучший ответ

Аватар пользователя goodboy goodboy 4 сентября 2017 в 18:24
1

Я бы решал с использованием модуля Views Field View ( http://xandeadx.ru/blog/drupal/639 ) в Views UI или вызывал в шаблоне программно вьюв для каждого типа источника. Метод затратный конечно, нужно кешировать.

Комментарии

Аватар пользователя goodboy goodboy 4 сентября 2017 в 18:24
1

Я бы решал с использованием модуля Views Field View ( http://xandeadx.ru/blog/drupal/639 ) в Views UI или вызывал в шаблоне программно вьюв для каждого типа источника. Метод затратный конечно, нужно кешировать.

Аватар пользователя iVor iVor 4 сентября 2017 в 19:19

То что нужно! Не знал что такой модуль существует.

Опишу подробнее, что нужно сделать для решения. Я использую русификацию интерфейса, так что привожу термины и названия полей в текущей версии их перевода.

Сначала нужно сделать "Дочернее" представление (7 шт. дисплеев, на каждом из отбираются только один тип источников):

  1. Выбор всех материалов типа "Статья"
  2. Формат - поля.
  3. "Обязательная" связь по полю Node reference.
  4. Контекстный фильтр с указанием этой связи, принимающий ID статьи (если значение не представлено - передать ID материала из URL).
  5. Поле с подсчетом (count distinct), из которого убрана метка и классы оформления.
  6. Критерий фильтрации по типу источника (на каждом из 7 дисплеев - свой тип).

Потом - "Родительское" представление

  1. Формат вывода - таблица
  2. Поле Заголовок (ссылкой на материал)
  3. Поле Nid (скрытое)
  4. Поле "Глобальный: Просмотр", в настройках указать название "Дочернего" представления и первый по счету дисплей, значение контекстного фильтра [nid]
  5. ...

  6. Поле "Глобальный: Просмотр", в настройках указать название "Дочернего" представления и последний по счету дисплей, с тем же значением контекстного фильтра
Аватар пользователя goodboy goodboy 4 сентября 2017 в 23:20

Можно еще попробовать обойтись одним дисплеем в дочернем представлении, сделав Тип источника как параметр.