При разработке сайта для риэлторов с каталогом недвижимости, каждый объект недвижимости помечается терминами из трех словарей:
1. Назначание объекта (продажа, аренда, спрос)
2. Тип объекта (вторичка, новостройки, коттеджи...)
3. Местоположение (словарь с иерархией по регионам, городам и районам)
На выходе нужно получить меню следующего вида:
Недвижимость
- Продажа
- - Вторичка
- - - Самара
- - - - Железнодорожный р-н
- - - - Кировский р-н
- - - Россия
- - Новостройки
- - - Самара
- - - - Железнодорожный р-н
- Аренда
- - Вторичка
- - - Самара
- - - - Железнодорожный р-н
- - - - Кировский р-н
- - - Россия
Т.е. к каждому из терминов из первого словаря крепим все термины второго словаря, каждому термину второго словаря крепим все термины из третьего словаря и т.д. При этом нужно выводить только те пункты меню в которых не пусто.
Пока все решил своим модулем, который при выходе пользователя (администратора сайта) вручную строит массив меню и делает перестройку таблицы меню. Решилась задача конечно быстро, но что-то не очень красиво))
Вот думаю может есть какие-то стандартные решения (модули) которые я просто упустил из виду?
p.s. Пока писал это, возникла мысль что может есть смысл генерить еще один словарь в котором разворачивать все дерево меню и при сохранении добавлять к ноде термин из этого обобщенного словаря а строить меню через menu_taxonomy?
Комментарии
Воспользуйтесь чудесным свойством таксономии tid1+tid2 и генерируйте блок
Блок это конечно выход, но он потянет за собой кучу проблем проблем: ручное добавление хлебных крошек; отслеживание какой пункт меню активен и раскрывать руками дерево; решать проблемы с кэшем, генерить это дерево... а еще стоит menu_block который режет меню на три уровня и выводит в разных блоках. Поэтому задачу нужно решать именно с помощью системы меню что бы не создавать себе дополнительных проблем, как с версткой так и с логикой интерфейса.
Спасибо за решение, но я хотел узнать как мою задачу можно решить именно с использованием системы меню.
Ну тогда пишите хитрый цикл в hook_menu(), который будет формировать нужный массив пунктов