Вывод похожих нод (нужно добить) [РЕШЕНО]

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

Аватар пользователя oleg220 oleg220 2 марта 2011 в 11:30

Здравствуйте, люди добрые!

Такой вопрос: вывожу список похожих товаров через views с использованием аргумента по "Таксономия: ID термина", где тип аргумента определяется PHP кодом, который я нашёл на этом замечательном сайте в одной из похожих тем:

<?phpif(arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) {
  $node = node_load(arg(1));
  $terms = taxonomy_node_get_terms_by_vocabulary($node, 1);
  if($term = array_shift($terms)) {
    return $term->tid;
  }
}?>

Он прекрасно работает, но, у меня часто одному товару соответствует несколько терминов. Например, моющему пылесосу соответствуют "пылесосы", "пылесосы сухой и влажной уборки", "моющие пылесосы".
И в результате мне выводит похожие товары из термина "пылесосы".
Как мне заставить выводить из последнего термина "моющие пылесосы"? При этом, у последнего (самого точного и нужного мне термина) всегда больше ID (т.е. taxonomy/term/29 - у моющих пылесосов, а у просто пылесосов taxonomy/term/5).

Комментарии

Аватар пользователя Sentrashy@drupal.org Sentrashy@drupal.org 2 марта 2011 в 11:47

А по какой логике должен действовать сервер по вашему? Если я вам дам детали от Шатла с тэгами и попрошу рассортировать у вас получится то же самое что и у компа Wink

Вобщем если всегда есть один определяющий термин, то можно сделать для него отдельный словарь и искать похожие ноды только по терминам из этого словаря

Аватар пользователя oleg220 oleg220 2 марта 2011 в 12:00

По моей логике, сервер должен выбрать больший ID термина из терминов, которые присвоены ноде, и выводить по этому термину.

Аватар пользователя oleg220 oleg220 2 марта 2011 в 12:02

т.е. моему пылесосу соответствуют термины с ID 5, 18 и 29. Нужно, чтобы вывелись все пылесосы, у которых тоже есть термин с ID 29.

Аватар пользователя Sentrashy@drupal.org Sentrashy@drupal.org 2 марта 2011 в 12:36

"oleg220" wrote:
По моей логике, сервер должен выбрать больший ID термина из терминов, которые присвоены ноде, и выводить по этому термину.

Проклянете потом себя, если так будете делать. (как реализовать не знаю)

Вобщем попробуйте [module=similarterms]. Модуль добавит вам вьюшку, вывод в ней настроите какой хотите. Там идет сортировка по умолчанию - similarity.
В вашем случае для моющего пылесоса сортировка будет выглядеть так:

1. Товары с терминами 5, 18, 29
2. Товары с терминами (5,29) или (5,18) или (18,29)
3. Товары с терминами 5 или 18 или 29

Вобщем по убыванию "похожести".

Аватар пользователя oleg220 oleg220 2 марта 2011 в 14:21

penexe, Ваш вариант вызывает ошибку:

  * warning: array_reverse() expects parameter 1 to be array, boolean given in T:\home\mag.ru\www\modules\views\plugins\views_plugin_argument_default_php.inc(48) : eval()'d code on line 3.
    * warning: array_shift() expects parameter 1 to be array, null given in T:\home\mag.ru\www\modules\views\plugins\views_plugin_argument_default_php.inc(48) : eval()'
d code on line 4.