Отношения узлов в представлениях Drupal

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

Если бы я писал сам, запрос, который я бы сделал, был бы примерно таким: SELECT * FROM recipe WHERE (fruit_1=$fruit OR fruit_2=$fruit). Моя проблема в том, что я не понимаю, как это сделать в Drupal View. Какие-либо предложения?

ОБНОВЛЕНИЕ: я наконец решил то, что пытался сделать. Для меня решением было использовать Panels вместе с View с использованием Views Or аргументов и установить одинаковые значения обоих аргументов с использованием первого Panels аргумента. Не уверен, правильно ли я объясняю свою проблему или свое решение, но если кому-то понадобится более подробное объяснение, не стесняйтесь спрашивать.


person Marco    schedule 09.12.2009    source источник


Ответы (2)


Представления или надстройка модуля: http://drupal.org/project/views_or

Его действительно следует включать в представления по умолчанию, потому что он очень мощный.

Параметр «начать альтернативы» по существу помещает в запрос «(». Параметр «следующая альтернатива» по существу помещает в запрос «ИЛИ». Параметр «конечные альтернативы» по существу помещает в запрос «)».

Фильтры представлений устанавливаются как «И» между каждым полем, это добавляет возможность «ИЛИ». Итак, используя ваш пример, ваши фильтры будут примерно такими:

Content Type = Recipe
Begin Alternatives
Node Title = fruit_1
Next Alternative
Node Title = fruit_2
End Alternatives

Обратите внимание, что у вас может быть несколько вариантов ИЛИ, используя больше фильтров «следующая альтернатива», каждый из которых ставит «ИЛИ» между другими фильтрами. Если это все еще сбивает с толку, проверяйте предварительный просмотр запроса на панели просмотра после каждого изменения.

person Kirk Hings    schedule 09.12.2009
comment
Я пробовал Views Or в течение некоторого времени, но, кажется, просто не понимаю, как это сделать. Пока у меня есть один аргумент с Node ID validator, он работает, как ожидалось, но когда я добавляю Next alternative и проверяю второе поле на то же значение (с Share argument), я получаю пустой WHERE и ошибку sql. Не уверен, что делаю не так - person Marco; 10.12.2009

Я не думаю, что есть способ выполнить ... ИЛИ ... часть вашего запроса в пользовательском интерфейсе представлений. Однако вы можете создать свой собственный модуль и использовать пользовательский интерфейс представлений для генерации первой части запроса, а затем использовать hook_views_query_alter в своем модуле, чтобы просто добавить WHERE (fruit_1=$fruit OR fruit_2=$fruit) в конец запроса.

Дополнительная информация на hook_views_query_alter здесь и здесь. Удачи.

person theunraveler    schedule 09.12.2009