Similar By Terms по двум словарям

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

Аватар пользователя buldozer_kpi buldozer_kpi 18 сентября 2015 в 10:27

Добрый день!
Есть тип материала АВТОСАЛОН, который имеет термины таксономии АвтосалонТермин.
Есть тип материала ГОРОД, который имеет термины таксономии ГородТермин.
И есть тип материала АВТОСАЛОН В ГОРОДЕ, который имеет термины и АвтосалонТермин, и ГородТермин.
Как сделать так, что бы в блоке через Views на странице АВТОСАЛОН В ГОРОДЕ выводились ссылки только на те материалы, которые совпадают терминами по двум словарям?
Использую Similar By Terms с установкой по умолчанию ID материала из URL, но там выводятся ссылки, если хотя бы один из словарей попадает под условие. То есть выполняется условие ИЛИ А ИЛИ В, а нужно условие И А И В.
Заранее спасибо за помощь!

Лучший ответ

Аватар пользователя buldozer_kpi buldozer_kpi 19 сентября 2015 в 20:56

Всё, пошёл пить пиво с пиццой сам ))
Обошёлся вьюхой с аргументами "ID термина таксономии из URL" без "Similar By Terms"

Комментарии

Аватар пользователя goodboy goodboy 18 сентября 2015 в 14:21

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

Аватар пользователя buldozer_kpi buldozer_kpi 18 сентября 2015 в 18:53

"Goodboy" wrote:
3. Если в типе материала АВТОСАЛОН В ГОРОДЕ значения терминов АвтосалонТермин и ГородТермин одинарные, можно создать view с 2-мя параметрами: АвтосалонТермин, ГородТермин

view с 2-мя параметрами - это с двумя аргументами Similar By Terms: Nid? В одной в пункте Limit similarity to terms within these vocabularies отметить галочкой один словарь, а в другом Similar By Terms: Nid другой?

Аватар пользователя goodboy goodboy 18 сентября 2015 в 20:29

buldozer_kpi wrote:
view с 2-мя параметрами - это с двумя аргументами Similar By Terms: Nid? В одной в пункте Limit similarity to terms within these vocabularies отметить галочкой один словарь, а в другом Similar By Terms: Nid другой?

Нет, я имел в виду обычный view с аргументами типа taxonomy reference, но там нужно получать значения терминов из ноды и передавать в аргументы. Ваш вариант может сработать, я до такого не додумался.

Аватар пользователя buldozer_kpi buldozer_kpi 18 сентября 2015 в 21:20

Мой вариант с двумя Similar By Terms: Nid почему-то ничего не выводит. Пока не придумал как побороть проблему.
А каким образом можно получать и отдавать аргументы? Хотелось бы решить задачу с использованием views.

Аватар пользователя goodboy goodboy 19 сентября 2015 в 0:28

buldozer_kpi wrote:
Мой вариант с двумя Similar By Terms: Nid почему-то ничего не выводит. Пока не придумал как побороть проблему.
А каким образом можно получать и отдавать аргументы? Хотелось бы решить задачу с использованием views.

Во вьюве, в контекстном фильтре, Передать значение по умолчанию, PHP-код

Код для примера поля field_tags

$arg1 = arg(1);
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 сортировка осуществляется по похожести, здесь же похожесть одинаковая, сортировка произвольная.

Аватар пользователя buldozer_kpi buldozer_kpi 19 сентября 2015 в 13:38

Для меня это уже высшая математика. Обязуюсь дать некоторое количество ВМЗ эквивалентное стоимости пиццы с пивом для того, кто предоставит готовое рабочее решение на базе views с подробным пошаговым описанием.

Аватар пользователя Augustus Augustus 23 января 2018 в 12:37

Тоже интересует ответ на данную задачу. PHP не владею, как сделать решение #1 от Goodboy, описанное выше, не понял, тем более у меня Друпал 7 (тут у автора 6). Будет кто так добр, что подскажет, как именно переписать надо
   $this->query->add_where(0, "similarterms_taxonomy_index.tid", $this->tids, 'IN');