[Решено] Несколько меню к одному разделу: добавить class

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

Аватар пользователя Apelsinova Apelsinova 3 июня 2012 в 16:30

Есть несколько логических разделов сайта. Для каждого из них используется своя таксономия и типа материала. Есть общее для сайта меню со списком разделов и отдельное навигационное меню (из ссылок на термины соответствующего словаря) для каждого раздела.

Задача: объединить оба меню так, чтобы при выборе раздела или термина или самого материала корректно проставлялся класс active соответствующим пунктам обоих меню.

На пальцах. Я выбираю раздел "Статьи". Активным помечается пункт "Статьи" и только он. Я выбираю пункт "Статьи о чём-то" в меню таксономии. Активным помечается пункт "Статьи" из общего меню и пункт "Статьи о чём-то" в меню таксономии. Я выбираю статью "Текст о очень важном". Активным помечается пункт "Статьи" из общего меню и пункт "Статьи о чём-то" в меню таксономии.
То есть всегда можно видеть, в каком разделе (одно меню) мы находимся и где именно в этом разделе (другое меню).

Сейчас меню раздела реализовано с помощью модуля Taxonomy Menu Trails. Но меню разделов не является списком терминов какой-либо таксономии, что не позволяет использовать классы в обоих меню сразу. Есть некоторые очень кривые решения, которые позволяют это сделать (например, вручную добавить скрытые подменю в общее меню), но хочется найти "правильны" метод.

Буду благодарна за советы.

UPD: В качестве временного решения использую модуль Menu Trail By Path. Поставляет нужный класс, исходя из URL страницы. Есть смутное ощущение, что такой вариант может привезти к тормозам при увеличении числа страниц.

Комментарии

Аватар пользователя Shok211 Shok211 3 июня 2012 в 17:36
  1. javascript ? (Пишем 9 строчек кода и тадам! всё работает)
  2. core hack (В функции l() или theme_link пишем код) (Слети при обновлении ядра)
  3. module hack (В функции модуля ищем место где формируется меню и пихаем туда) (Слетит при обновлении модуля)
  4. module theme alter & template preprocess (Если модуль написан правильно ищем нужную нам функцию и через alter, preprocess добавляем класс)
Аватар пользователя Apelsinova Apelsinova 3 июня 2012 в 17:42

Спасибо за советы!
Варианты, которые теряются при обновлении ядра/модуля не подходят однозначно. Не обновлять модули или, тем более, ядро - тоже не вариант, по понятным причинам. Пока склоняюсь к варианту с js. Изначально думала об этом, но надеялась, что есть какие-то уже готовые решения/модули/способы. Например, была вероятность, что я чего-то просто не заметила или не включила где-то галочку.
Тот модуль, который стоит сейчас, не устраивает меня не только этим. Например, нет автоматического формирования меню. Пока я не скажу модулю сама, что список терминов изменился, он это не увидит. В моём случае такой вариант не подходит. Но я была бы готова с этим смириться ради общих классов. Если нет - то искать другой или писать вывод таксономии вручную. То есть четвёртый вариант тоже вряд ли.

Спасибо, что ответили. Теперь хотя бы понятно, какие варианты у меня есть.