Есть два словаря "фрукты" и "цвета".
В первом термины:
- Персик
- Яблоко
Во втором, соответственно:
- Белый
- Зеленый.
Задача: создать меню
Персик
- Белый
- Зеленый
Яблоко
- Белый
- Зеленый
Пояснение задачи: жмем "Персик" --> "Белый" = получаем перечень нод, имеющих оба термина.
Вопрос: КАК? Голову уже сломал, а надо. Не вручную же прописывать все меню - пунктов море и автоматом должны создаваться...
Помогите.
Комментарии
Попробую переопределить задачу.
Есть только один словарь.
В нем термины "Яблоко" и "Персики".
А еще термин "белый", у которого два родителя - "Яблоко" и "Персики".
И термин "красный", у которого тоже два тех же родителя.
Задача - вывести меню полную иерархию вида
Яблоко
- Белый
- Красный
Персики
- Белый
- Красный
Модуль Taxonomy Treemenu выводит такое дерево, но при этом "Яблоко-Белый" имеет тот же путь, что и "Персики-Белый", то есть просто "Белый". Нужно что-то другое
задача не решена
по-прежнему
Присоединяюсь к вопросу.
Таксономией обязательно?
Может быть другой способ?
Насколько я понимаю, иерархия - это не самое сильное место таксономии.
На ум приходит book, но я им даже не пользовался.
[module=http://drupal.org/project/taxonomy_menu]
[module=http://drupal.org/project/adv_taxonomy_menu]
модули, которые могут помочь
я такое делал для себя в виде своего модуля только у меня Белый и Зеленый были в том же словаре и иерархически связаны, и получалось как раз то, что вы хотели.
Модуль для 5-ки пришлось писать свой (на основе taxonomy_menu) так как таксономия из коробки похоже не умеет выводить пересечения терминов, во всяком случае иерархически связанных. С чем это связано не знаю так как если дергать api функции самой таксономии, как в D5 и D6 то функции умеют выводить пересечение терминов, даже иерархических.
Но лично у меня почему-то не работает конструкция вида
site/taxonomy/menu/Яблоко,Белый
вот хоть убейся, но функция taxonomy_terms_parse_string, которая должна парсить строку вида "Яблоко,Белый", чтобы определить булевый операнд операции, не вызывается в этом случае, она вызывается только из функции taxonomy_term_page.
То есть, если сделать иерархический один словарь, как я описал, то
$output = taxonomy_term_page("nid_apple,nid_white", 0 , 'page');
вместо nid_* подставить числа в таксономии, то эта функция вернет контент пересечения ровно двух терминов, а именно Белых яблок.
Того же самого еще можно добиться так
$output = taxonomy_render_nodes($result);
tids это массив, где каждый желемент это номер в таксономии, в данном случае array(nid_apple, nid_white)
Почему эти функция ни в D6 ни в D5 не используется мне не понятно.
Вот и пришлось свой модуль под D5 накатать используя за базу taxonomy_menu, а щас вот опять озаботился этим так как под D6 переносить надо, перенес, только вот не осталось
в views вот такой функции
$output = theme('view', variable_get('taxonomy_menu_show_views2_'.$vid, ''), NULL, NULL, 'embed', array(implode(",", $tids)));
с помощью которой я накладывал определенный view, название которого хранилось в taxonomy_menu_show_views2_ в зависимости от словаря
в D6 + Views 2 теперь такой функции нет
заметьте в implode(",", $tids) используется запятая, то есть операция типа and, а не or как в случае с + или пробелом.
view использую, чтобы убрать повторы терминов, функция их множит в моем случае, так как иерархия, то есть одно и то же яблоко есть как в категории белый, так и в яблоко, но при операции and он это самое яблоко мне дважды выводит, потому поверх я прикрутил в свое время view, который копию убирал, плюс сортировку делал по cck полям ubercart-a.
А щас что то не пойму как в новом view аналог функции найти.
Надеюсь разъяснил то что сам нарыл, вот теперь думаю может можно как то саму таксономию лягнуть чтобы она эти , + обрабатывала прямо из url. Тогда и гемороев бы не было бы без всяких других модулей типа taxonomy_menu или hierarhy select или category, там конечно своего функционала наверчено.
Сижу вот думаю, кто же обрабатывает url taxonomy/term/%, чтобы хоть глазком взглянуть на код.
Забыл упоминуть, иерархический словарь я использовал еще потому что, я по нему меню автоматом создавал, так как прописывать связь термина белый, красный с каждым яблоком или персиком было совсем тяжко, а в иерархии просто указывал что у белого и красного несколько родителей. и у меня все родители сразу обрастали этими свойствами
Эх, вот здесь http://drupal.org/node/564652 указано, что если у вас кривая view для taxonomy_term
то ссылки site/taxonomy/term/Яблоко,Белый могут не работать так как их перехватывает кривая view,
отключил эту view сразу заработали подобные url и функция та по разбору строки вызывается теперь
осталось все переосмыслить только как бы уменьшить себе гемору, вот знал бы раньше, сделал бы возможно все по другому без всяких taxonomy_menu к примеру
а еще кто бы ткнул носом в то место которое у view в аргументах не правильное
Отвечу сам себе теперь вместо той view можно вызыват так
$output = $view->execute_display($display_id, array(implode(",", $tids)));
ларчек просто открывался, подглядле в исходниках модуля
http://drupal.org/project/tvi