Добрый день!
Есть тип материала АВТОСАЛОН, который имеет термины таксономии АвтосалонТермин.
Есть тип материала ГОРОД, который имеет термины таксономии ГородТермин.
И есть тип материала АВТОСАЛОН В ГОРОДЕ, который имеет термины и АвтосалонТермин, и ГородТермин.
Как сделать так, что бы в блоке через Views на странице АВТОСАЛОН В ГОРОДЕ выводились ссылки только на те материалы, которые совпадают терминами по двум словарям?
Использую Similar By Terms с установкой по умолчанию ID материала из URL, но там выводятся ссылки, если хотя бы один из словарей попадает под условие. То есть выполняется условие ИЛИ А ИЛИ В, а нужно условие И А И В.
Заранее спасибо за помощь!
Similar By Terms по двум словарям
Главные вкладки
Лучший ответ
Всё, пошёл пить пиво с пиццой сам ))
Обошёлся вьюхой с аргументами "ID термина таксономии из URL" без "Similar By Terms"
Комментарии
1. Similar by terms создает запрос, в котором в IN перечислены все термины ноды
similarterms_taxonomy_index.tid IN ('127', '231', '40', '25')
Необходимо, чтобы было разделение по словарям и в итоге
similarterms_taxonomy_index.tid IN ('127', '231') AND similarterms_taxonomy_index.tid IN ('40', '25')
Этого можно добиться, изменив модуль (файл /similarterms/views/similarterms_handler_argument_node_nid.inc ) или же в своем модуле переопределить query в hook_views_query_alter
2. Использовать сниппет и переписать его нужным образом
3. Если в типе материала АВТОСАЛОН В ГОРОДЕ значения терминов АвтосалонТермин и ГородТермин одинарные, можно создать view с 2-мя параметрами: АвтосалонТермин, ГородТермин
4. Использовать какой-то другой модуль из списка на https://www.drupal.org/node/323329
view с 2-мя параметрами - это с двумя аргументами Similar By Terms: Nid? В одной в пункте Limit similarity to terms within these vocabularies отметить галочкой один словарь, а в другом Similar By Terms: Nid другой?
Нет, я имел в виду обычный view с аргументами типа taxonomy reference, но там нужно получать значения терминов из ноды и передавать в аргументы. Ваш вариант может сработать, я до такого не додумался.
Мой вариант с двумя Similar By Terms: Nid почему-то ничего не выводит. Пока не придумал как побороть проблему.
А каким образом можно получать и отдавать аргументы? Хотелось бы решить задачу с использованием views.
Во вьюве, в контекстном фильтре, Передать значение по умолчанию, PHP-код
Код для примера поля field_tags
if ( arg(0)=='node' && $arg1 && is_numeric($arg1) ) {
if ( $node = node_load($arg1) ) {
return $node->field_tags[0]['tid'];
}
}
Да, и нужен третий аргумент для вьюва - это Nid, по-умолчанию ID материала из URL, Исключить. Иначе в результат попадет текущая нода.
В итоге, получится не Similar terms, а просто фильтрация по двум параметрам. В Similar terms сортировка осуществляется по похожести, здесь же похожесть одинаковая, сортировка произвольная.
Для меня это уже высшая математика. Обязуюсь дать некоторое количество ВМЗ эквивалентное стоимости пиццы с пивом для того, кто предоставит готовое рабочее решение на базе views с подробным пошаговым описанием.
Всё, пошёл пить пиво с пиццой сам ))
Обошёлся вьюхой с аргументами "ID термина таксономии из URL" без "Similar By Terms"
Тоже интересует ответ на данную задачу. PHP не владею, как сделать решение #1 от Goodboy, описанное выше, не понял, тем более у меня Друпал 7 (тут у автора 6). Будет кто так добр, что подскажет, как именно переписать надо
$this->query->add_where(0, "similarterms_taxonomy_index.tid", $this->tids, 'IN');
Кто-нибудь?