Отображать все узлы с одинаковым значением поля для текущего узла


СПРАВОЧНАЯ ИНФОРМАЦИЯ: Сайт использует типы контента, которые автоматически создаются с помощью правил, называемых CT-A и CT-B. CT-B представляет полный URL-адрес, а CT-A представляет этот домен URL. CT-A всегда создается с помощью правил только один раз, при первом создании типа контента CT-B. Оба типа контента имеют общее поле (field_domain), указывающее домен. Исходный контент вводится пользователем, поэтому невозможно предсказать значение field_domain в продвижение.

ПРОБЛЕМА: Мне нужно отобразить простое представление типа "связанный контент" в CT-A, показывающее все узлы типа CT-B, которые соответствуют значению field_domain. Значение для field_domain не может быть определено заранее и должно предоставляться программно/систематически либо путем взятия из поля в узле, либо в качестве токена (та же разница).

ПОДХОДЫ: Я предполагаю, что ответ кроется в Представлениях. Указание значения для field_domain не работает, потому что значение изменяется в зависимости от ввода пользователя. Я пробовал глобальное сравнение полей, но, похоже, невозможно сравнить как текущий узел field_domain, так и то же поле в узлах, отображаемых в представлениях. Я пытался использовать панели представлений для передачи аргумента для текущего узла field_domain на дисплей панели, но он также не вернул результатов. Я видел различные PHP-решения для контекстных фильтров, но они также, похоже, не работают (большинство многообещающим является https://www.drupal.org/node/1006484#comment-4990312 , но это возвращает следующую ошибку: https://www.drupal.org/node/829250 ).

Таксономия не сработала из-за природы автоматического создания. Кажется невозможным создать уникальный идентификатор термина, передавая значения в Правилах - имя термина будет таким же, но идентификатор термина отличается, и Представления судят о термине на основе его идентификатора. Невозможно автоматически создать словарь терминов в Правилах из-за ошибки с присвоением имени машины.

Ссылка на сущность также имеет проблемы с характером автоматического создания. Я не нашел в Правилах способа ссылаться на два типа в соответствии со значением field_domain и не уверен, что он существует.

API поиска Попробовал этот подход (сравните индекс поиска), предложенный по ссылке ниже, но опять же он не работает, если у вас нет предопределенного значения для field_domain, так как для этого требуется установить значение вручную.

Наиболее очевидным подходом, по-видимому, является "Фильтр представлений отображает все узлы с одинаковым значением поля. Но, несмотря на очевидность, это, похоже, нелегко осуществить. Возможно, есть способ, не связанный с представлениями, который я не рассматривал?

Связанные с этим вопросы (все, похоже, не решены):

[прошу прощения, я ограничен репутацией...но есть по крайней мере 4 открытых вопроса в связанных вопросах справа, которые все еще не решены]

Распахиваю ее...похоже, что несколько человек столкнулись с этой проблемой. Есть какие-нибудь новые идеи?

Author: Clive, 2017-09-09

2 answers

Способ, которым я всегда справлялся с этим, заключается в том, чтобы построить рассматриваемое представление, используя "значение поля для соответствия" в качестве контекстного фильтра. Для настроек контекстного фильтра выберите "Указать значение по умолчанию", для типа выберите "Код PHP", а для "Кода контекстного фильтра PHP" загрузите текущий узел и возьмите его значение поля,

$node = menu_get_object();
return $node->field_domain['und'][0]['value'];
 1
Author: sgorneau, 2017-09-11 14:44:15

** !! РЕШЕНИЕ!!**

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

Создайте зеркальное поле для поля, которое вы хотите просмотреть (Правила -> Событие: после сохранения/обновления содержимого -> Условие: имеет "field_domain" -> Действие: Установите значение данных: Установите "field_domain_copy", используя значение "field_domain".

Представления ->Создать -> Содержимое -> Контекстный фильтр типа содержимого - > Содержимое:домен (field_domain) -> Если фильтр недоступен, укажите значение по умолчанию. Выберите PHP, введите этот код:

$node = menu_get_object();
return $node->field_domain_copy['und'][0]['value'];

Фильтр -> Содержимое: Тип -> выберите тип содержимого для отображения, если это необходимо

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

 0
Author: Sarastro, 2017-09-15 14:07:14