[решено] Список нод, прикрепленный к ноде, с теми же терминами

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

Аватар пользователя Andruxa Andruxa 24 апреля 2011 в 14:45

В этом посте была поставлена интересная и полезная задача:
- на странице ноды вывести список заголовков нод, имеющих тот же термин таксономии

С ходу возникает такой пример использования:
есть каталог статей, организованный словарем таксономии в иерархию:

политика
--внешняя
--внутренняя
экономика
культура
ну и.т.

нужно выводить после статьи список статей (их заголовки и м.б. анонсы) на ту же тематику.

Для усложнения задачи будем помнить, что:
- нода может быть привязана к нескольким словарям, некоторые из которых выполняют служебные функции, и по их терминам список строить не надо
- нода может быть привязана одновременно к нескольким терминам одного словаря (статья имеет тэги "политика" и "экономика")

Итак, создаем новое представление:
Представления > добавить ( /admin/build/views/add )
Имя представления - по вкусу, тип - Материал

Переходим на страницу редактирования представления

Взаимосвязи:
добавляем новую связь Таксономия: Связанные термины
(та, которая первая в списке, у нее описание "Relate nodes to taxonomy terms, specifiying which vocabulary or vocabularies to use...")
Включаем чекбокс "Эта связь обязательна", дальше идет список словарей, он в нашем случае не работает, чекбоксы можно не трогать

добавляем новую связь Таксономия: Материал
Выбираем Связь: термин (или какую метку вы указали первой связи)
Не использовать связь
Включаем чекбокс "Эта связь обязательна"

Аргументы:
добавляем Материал: Nid
Выбираем Связь: материал (или какую метку вы указали второй связи)
Не использовать связь
включаем чекбокс "Исключить аргумент"

Поля:
добавляем Таксономия: Термин,
выбираем Связь - не использовать связь,
Метка: оставляем поле пустым,
Включаем чекбоксы:
- Исключить из вывода
- Скрыть при пустом значении
- Сделать это поле ссылкой на страницу его термина таксономии

Добавляем поле Глобальный: Пользовательский текст
Метка: оставляем поле пустым,
Включаем чекбокс Исключить из вывода
Текст: Другие статьи по теме [name]

Добавляем поле Материал: Заголовок
выбираем Связь - не использовать связь,
Метка: оставляем поле пустым,
включаем чекбокс Создать ссылку на материал, к которому относится текущее поле

При желании можно добавить аннотации статей, добавив соответствующее поле

В основных настройках жмем на шестеренку напротив Стиль:
Выбираем Группировать по полю - Глобальный: Пользовательский текст

Теперь отфильтровываем словари, по которым заголовки нод выводить не надо:
Добавляем фильтр Таксономия: Словарь
и, в зависимости от желаемого результата добавляем/исключаем нужные словари

Теперь немного бочки дёгтя в ложку с мёдом:
в списке заголовков выводится заголовок ноды, от которой строится вывод
это неудивительно, ибо эта нода привязана к терминам, по которым строится список
с точки зрения пользователя, читающего статью, этот заголовок в списке не нужен, он уже находится на странице с этой статьёй.
Логика подсказывает, что нужно добавить фильтр Материал: Nid != % но он не работает,
помогайте!

Решено пользователем faraon, огромное спасибо!

Осталось прикрепить это представление к странице ноды.
Вариант 1: воспользоваться модулем Views Attach, с его помощью создать в представлении вывод Node content, в нем указать типы материалов и вывода, к которым прикреплять представление, аргумент - nid
Вариант 2: если будете править темплейт ноды node-тип_материала.tpl.php, то можно обойтись без модуля, вызвав представление из темплейта с помощью <?php print views_embed_view('имя_представления','имя_вывода (default)',$node->nid); ?>

Вывод: views - это хорошо и правильно, полюбите его всем сердцем, и он ответит вам тем же.

Комментарии

Аватар пользователя faraon faraon 2 мая 2011 в 5:01

"Andruxa" wrote:
помогайте!

В аргументе "Материал: Nid" снизу поставить галочку "Исключить аргумент". Таким образом текущая нода будет исключена из вывода.

Аватар пользователя faraon faraon 2 мая 2011 в 15:42

"Andruxa" wrote:
а сами пробовали?

Да,
Action to take if argument is not present: Provide default argument
Default argument type: Node ID from URL
Exclude the argument

У Вас не работает?

Вот пример, слева блок "В этом разделе"