Мне надо получить в ноде id меню, к которому она "приставлена".
Не могу разобраться. К какому словарю и термину - всё понятно. А как связать словарь и меню? Или можно как-то сразу ноду с меню? Через какие поля, может есть какая-то функция, которую я пропустил в апи? Советы? Может какие-то модули где что-то похожее реализовано?
Комментарии
Меню - это, грубо говоря, просто набор ссылок. Вообще, в Друпале контент как бы существует отдельно - есть "точки входа", например, для ноды это путь вида node/[id], для категории (термина таксономии) - taxonomy/term/[id] и т.д... А как "достучаться" до контента - ручками это в браузере набирать или создать ссылки в меню - это уже ваше дело.
Другое дело, что процесс создания этих ссылок можно автоматизировать. Например, для создания меню на основе таксономии копайте в сторону модулей типа taxonomy_menu.
Сейчас я сделал так:
Из ноды вытаскиваю термин $tid. И потом menu_set_active_item('taxonomy/term/'.$tid);
Чаще всего это работает и всё хорошо. Но иногда возникает одна проблема. Всё дело в том, что если нода присвоена к конечному (или как его назвать, к самому глубокому) термину, у которого линк типа taxonomy/term/43, то всё хорошо, нода возвращает 43 и устанавливает меню - menu_set_active_item('taxonomy/term/'.$tid). Но если нода прикреплена к термину отцовсковскому, у которого линк в меню к примеру taxonomy/term/43 44 45 , т.е. меню пункт указывает не на один термин, то проблема в том, что когда заходишь на ноду, она возвращает 45 и переходит menu_set_active_item('taxonomy/term/'.$tid) и естественно пункта меню не находит.
Вопрос в том, как лучше определить активный пункт меню, есть идея искать в базе все LIKE %id%, который вернёт к примеру taxonomy/term/43 44 45 80 81 30 31 25 26 и taxonomy/term/43 44 45 30 31 26 и taxonomy/term/43 45 и самый короткий линк выбрать и взять, как активный пункт меню для ноды.
Может есть какие-то другие решения?
Надеюсь вопрос понятен. Спасибо.
Все-таки, не совсем ясно, что вам нужно. Как я понял, при просмотре ноды (uri=/node/id) вы хотите, чтобы у вас в меню каким-то образом выделялась категория, к которой принадлежит данная нода?
Что за url вида taxonomy/term/43 44 45 ? Может taxonomy/term/43+44+45 ? И вы, наверное, так выводите ноды, которые принадлежат категории tid-43 и детям этой категории (tid-44/45)?
Нода не может быть "прикреплена терму taxonomy/term/43 44 45". "taxonomy/term/43 44 45" - это вообще никакой не терм, это "точка входа" для вывода сразу нескольких термов. Ссылки - это просто кусок HTML-кода и они (упрощенно) существуют отдельно от объектов с-мы, на которые ведут. Т.е. нода не может быть "прикреплена к ссылке".
Ну да, нода прикреплена к одному термину (43), но ссылка 43 44 45 выводят все ноды этих трёх терминов. дело в том, что как бы несуществует в меню отдельной ссылки term/43 / и когда я использую set_active_item(43), то не находит меню (я как понимаю он ищет по ссылке).
Если дерево изобразить то :
43
/ \
44 45
Вот живой пример:
http://ekspertai.indis.lt/taxonomy/term/15%2016%2022%2021%2018%2017%2019...
Выводит все ноды из категорий. Родительской и детей. Если нажать на Monier cerpes (http://ekspertai.indis.lt/node/21), которая принадлежит к родительскому термину (на который явно не определён линк в меню). То меню не находит, а находится :
ekspertai.lt » Taksonomijos terminas (на литовском термин таксономии)
Если выбрать SIAUDU STOGAI (http://ekspertai.indis.lt/node/40), которая прикреплена к самому глубокому термину таксономии то все окей, потомучто существует в меню линк http://ekspertai.indis.lt/taxonomy/term/18.
Яснее?:)
П.С. я использую модуль taxonomy menu, для отображения таксономии в меню.
Выводить участок дерева "ручным" перечислением всех термов неправильно!! А если бы у вас было 1000 термов, так ручками бы и перечисляли tid?
Для того, чтобы вывести дерево для tid-15 + всех его детей достаточно сделать так: http://ekspertai.indis.lt/taxonomy/term/15/all Для 5-ки был модуль forceall, который автоматически добавлял /all для всех ссылок на таксономию (т.е. вы заходите на http://ekspertai.indis.lt/taxonomy/term/15, а у вас все равно выводится tid-15 + дети), для 6-ки его, по-моему, нет, но в принципе это несложно самому реализовать. Или если ссылок немного, вручную добавить к ним /all
По поводу вывода ссылок потом посмотрю, если время будет По поводу set_active_item($path). Если вы заглядывали в код, она всего лишь изменяет путь текущей страницы на $path (почитайте, кстати, комментарий к этой ф-ии, для чего она нужна). Выводить доп. участок дерева путем изменения пути текущей страницы, наверное, несколько криво.
да, я заметил, что функция set_active_path меняет просто get[q], но другого способа сделать меню активным я не нашёл (есть модуль какой-то но он не совсем подходит потомучто у меня меню стороннее а не стандартное).
а перечисление терминов, а не /all это taxonomy_menu модуль сделал, я в него не лазил и доверился, отметив в настройках галочку "показывать детей".
спасибо за советы, буду разбераться.