Магия Views Arguments + Node Reference

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

Аватар пользователя novik@drupal.org novik@drupal.org 10 октября 2008 в 2:12

Гуру, кто-нибудь с подобным сталкивался?

Задача: отфильтровать во views заданные ноды по аргументу, где аргумент — одно или более значений node reference nid в фильтруемых нодах.

Визуально это можно представить как

http://mysite.com/gallery/1
http://mysite.com/gallery/1,2,3 etc.

здесь аргументом является nid галереи. Да-да, галерея это нода. Так надо.. Smile
Ссылки на галерею формируются программно где-то на страницах сайта.

Решение N1: через exposed filter. Сам фильтр темизируем и прячем, в галерее его не видно. Это работает, но .. выглядит неаккуратненько как-то!

Решение N2: через аргументы. Но, стандартно формируемый фильтр не принимает больше одного значения аргумента. То есть используется всегда только первое значение из "1,2,3"

Был опробован метод динамического добавления фильтра в коде аргумента

$view->is_cacheable = 0;
$new_args = explode(',', $args[0]);
views_view_add_filter($view, 'node_data_field_nomenclature', 'field_nomenclature_nid', 'OR', $new_args, '');
views_sanitize_view($view);
return $args;

Это результирует в SQL ошибку, об этом народ жалуется на форуме drupal.org. К сожалению, issue закрыто с "won't fix" — мол, обращайтесь к разработчикам views, некогда нам Smile

Может кто-то сталкивался с подобной задачей и удачно её решил вторым способом?

Да, версия Views 5.x-1.6

Комментарии

Аватар пользователя novik@drupal.org novik@drupal.org 10 октября 2008 в 13:22

kyky wrote:
а может вам попробывать писать аргументы не через запятую, а через знак плюса?

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