Подтвердить что ты не робот

Создание списка похожих узлов в Drupal 7/Views 3

Скопируйте файл drupal.stackexchange.com, надеясь получить больше ответов здесь:

Я сталкиваюсь с довольно распространенной проблемой отображения списка узлов, похожих на текущий. Подобный node определяется как имеющий по крайней мере один таксономический термин, который имеет текущий node. Существует несколько решений, доступных в виде модулей, однако модули, которые я нашел (в частности, похожие по правилам), находятся в стадии бета (как в режиме "не работает должным образом" ) для Drupal 7.

Я также нашел пару решений на основе Views и контекстных фильтров (например, http://scito.ch/content/show-related-nodes-block-based-taxonomy-terms-views-3-and-drupal-7) или отношений. Мне это очень нравится, так как это избавляет меня от установки дополнительных модулей и активно развивается и поддерживается Views. Я бы предпочел использовать их, а не любое настраиваемое решение. Проблема, с которой я не могу разобраться, заключается в том, как сортировать "похожие узлы" по количеству условий, которыми они разделяют. Например, если у меня есть "IPhone 4S" node с Условиями "Гаджет", "Яблоко" и "Телефон", я хочу, чтобы подобные узлы были в следующем порядке:

  • IPhone 3 (Apple, Gadget, Phone)
  • IPad (Apple, Gadget, Tablet)
  • Mac (Apple, компьютер)
  • Брамли (Apple, Fruit, Tree)

Как я могу сортировать узлы в этом представлении по количеству разделяемых им терминов?

Этот вопрос касается создания представления, пожалуйста, не предлагайте модули или настраиваемые решения на основе php. Спасибо.

4b9b3361

Ответ 1

  • Создать представление блока
  • Добавить контекстный фильтр → Содержимое: Nid → Предоставить значение по умолчанию → Идентификатор контента из URL
  • Добавить взаимосвязь → Содержание: термины таксономии на node → указать соответствующий лексикон
  • Добавить отношения → таксономический термин: содержание, использующее словарь, как указано выше → Отключить Требовать это отношение
  • Включить агрегацию просмотров (ПРИМЕЧАНИЕ: стрелка на скриншоте ниже указывает на неправильное место и должна указывать на две строки ниже, где она есть).
  • Предполагая, что вы указываете только заголовок, отредактируйте поле заголовка, чтобы использовать функцию "Отношения", указанную выше в # 4.
  • Добавить новые критерии сортировки контента: Nid. В настройках агрегации выберите "Счет". Использовать связь из # 4 и сортировать по убыванию
  • Добавить контекстный фильтр → Содержание: Nid → Использовать отношения из # 4 → Предоставить значение по умолчанию - Идентификатор контента из URL → Прокрутить вниз и развернуть "Дополнительно", а затем установить флажок "Исключить", чтобы удалить текущий node из просмотр

** См. комментарий от @garret-albright ниже, чтобы проверить это в предварительном просмотре пользовательского интерфейса Views. **

Related node view

Ответ 2

Угадайте, что - есть модули для этого: D

Я могу порекомендовать похожее на термины, предоставляя вам этот вид без проблем настройки.

Ответ 3

Это альтернативное решение, связанное с этим вопросом. Однако это может не относиться ко всем случаям, но если вы можете использовать его, это проще (и, на мой взгляд, более безопасно, чем агрегация).

Я собираюсь использовать panels. Создав панель для отображения вашей сущности (node или что-нибудь еще), вы можете добавить несколько представлений и показать их рядом с содержимым. одним из этих взглядов будет наш связанный контент.
Таким образом, панели являются единственным ограничением. Возможно, можно использовать мини-панели и представлять их как блок, я сам не пробовал.

Необходимые условия

  • Виды (d'oh!)
  • Панель
  • Область содержимого: нет необходимости загружать, она находится в модуле ctools, загружаемом с представлениями.
  • Менеджер страниц: такая же, как панель содержимого просмотров (необязательно/настоятельно рекомендуется).


Вид

  • Создайте свой вид, как обычно, но не создайте его как блок или страницу. Снимите флажок.

  • На странице конфигурации просмотров создайте отношение к термину таксономии для объекта.

  • Создайте контекстный фильтр для фильтрации: Термин таксономии: идентификатор срока действия.

  • Создайте еще один контекстный фильтр: Идентификатор объекта или Контент: Nid, если он node.

    • При создании этого, внизу находится свернутый набор полей, который имеет опцию: Исключить. Проверьте это как отмечено.

  • Теперь, нажав Добавить, создайте новый экран типа Панель содержимого.

  • В области конфигурации дисплея (с именем: Настройки панели) откройте Аргумент. У вас должно быть 2 варианта:

    • Контент: источник Nid: укажите источник как из контекста. Установите для него обязательный контекст как ID контента (если вы не используете node, он может быть ID.
    • Термин таксономии: источник идентификатора термина: установите источник как из контекста. Установите для него обязательный контекст как идентификатор срока действия.

Congrats! Вы сделали свое представление. Это время для панели (я не буду подробно объяснять создание панели, поскольку она выходит за рамки этого Q/A).

Панель

  • Создайте панель (или включите панель по умолчанию node/% node и добавьте вариант).

  • В вкладке контекст создайте связь с термином таксономии.

  • Нажмите, чтобы добавить контент в одну из панелей.

  • Если вы не изменили категорию вида, в панели просмотра добавьте ее. Он запросит идентификатор объекта и идентификатор срока действия, которые теперь доступны в контексте ваших панелей, установите их.

  • Теперь, когда отображается панель, отображается весь контент с тем же термином, за исключением содержимого на этой странице.

Конфигурация просмотров

Views Configuration

Контекстный фильтр

Contextual filter

Ввод аргумента

Argument input

Важно P.S:

Этот метод проверен и работает безупречно, но на момент написания этой статьи у ctools была ошибка. Для этого есть патч: https://www.drupal.org/node/2195211

Ответ 4

Когда вы настраиваете сложные представления, подобные этому, есть несколько советов по настройке, которые могут помочь вам понять, что действительно происходит на каждом шаге:

В структуре → Просмотры → Настройки → Основные:

  • Отметьте "Показать расширенное предупреждение помощи" (важно: требуется модуль расширенной справки)
  • Проверка "Автоматическое обновление предварительного просмотра изменений"
  • Отметьте "Показывать информацию и статистику о просмотре во время предварительного просмотра"
  • Отметьте "Показать запрос SQL"
  • и, наконец, сохранить конфигурацию

Теперь вы можете просмотреть результаты с каждого шага конфигурации, связанного с SQL запроса и полей и таблиц, поэтому вам будет легче понять, как работают фильтры и агрегации.

Надеюсь, что это поможет.

Ответ 5

Я не уверен, полностью ли я получил суть вопроса, но я думаю, что очередь node - это ответ. Проверьте http://drupal.org/project/nodequeue

Модуль хорошо развит. Я использовал его для клиента, и вы можете использовать их smartqueue api, также сделайте свой список.

Надеюсь, что я был полезен.