Меню из двух словарей?

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

Аватар пользователя direqtor direqtor 30 октября 2008 в 10:42

Для сайта нужна двухуровневая иерархия в одном из меню. Штатный способ - создать соответствующий словарь с иерархией терминов и вывести его через [module=taxonomy_menu]. Но тогда при редактировании придется выбирать из полного дерева, что не очень удобно. Подчиненные и основные термины относятся к разным сущностям и правильнее было бы вводить их каждый через свой выпадающий список. К тому же подчиненные термины в каждом из основных терминов совпадают (будут дубли в иерархии).

Поэтому делаю два словаря для терминов каждого вида. Теперь можно удобно вводить термины, но вот как из них составить иерархическое меню в два уровня, чтобы в подчиненных терминах отображались только те ноды, что находятся еще и в основном термине?

Сия тема поднималась здесь не раз.
Не нашел ли кто-нибудь решения?
Через какой-нибудь хитровыдолбленный views?
Или есть готовый модуль?
Или мне придется писать свой модуль?

Комментарии

Аватар пользователя gorr gorr 30 октября 2008 в 14:54

Да, тоже часто такая задача встает.
Когда такое нужно? Например когда нужно сделать фасетную структуру сайта, то есть когда структура напоминает вот такую:

Москва
- магазины
- - продуктовые
- - хозяйственные
- - спорттовары
- аптеки
- кинотеатры
Киев
- магазины
- - продуктовые
- - хозяйственные
- - спорттовары
- аптеки
- кинотеатры
Санкт-Петербург
- магазины
- - продуктовые
- - хозяйственные
- - спорттовары
- аптеки
- кинотеатры

Городов может быть очень много, поэтому создавать 1 огромный словарь не годится. Вносить сто раз одно и тоже в словарь для каждого города? Да и выбор потом из такого словаря при внесении ноды тоже неудобен. Правда есть этот hierarchical select, но мне не понравился.

При этом хочется получить именно иерархическую структуру, то есть, чтобы пользователь видел в каком разделе сайта он находится: Москва>>Магазины>>продуктовые, а не магазины>>продуктовые.
Да, при выборе термина можно указать несколько родителей, НО если перейти по ссылке "магазины", формируемой друпалом в бредкрамбах мы вываливаемся из Москвы и попадаем на страницу со списком магазинов из всех городов.

Напрашивается сделать 2 словаря: города и заведения. Но в таком случае тоже не строится иерархия, зато удобно выбираются категории из словарей при добавлении ноды и сами словари сравнительно небольшие.

Мне кажется было бы идеально сделать модуль, в котором можно было бы задавать иерархию словарей. То есть первый уровень - города, второй - заведения например.
В результате автоматически создается меню(либо словарь новый), содержащее в себе нужную иерархию.

Эт так, мысли вслух.

А вот тут человек делится тем, как он под др.5 выкручивался с подобной задачей:

http://blue.live4all.co.il/~mooffie/cms/node/15

Аватар пользователя gorr gorr 30 октября 2008 в 15:32

Кстати сразу возник вопрос, можно ли войти в процесс создания, редактирования и удаления терминов таксономии, есть ли хук для этого. Чтобы делать сразу поправки в своем словаре.
Ответ - можно, нужно для этого использовать хук taxonomy.

Аватар пользователя pachkow@drupal.org pachkow@drupal.org 31 октября 2008 в 8:08

Аналогичная проблема. В данный момент пытаюсь найти наиболее рациональное решение. Использование иерархии внутри словаря имеет ряд недостатков. Поэтому придется создавать иерархию словарей.
Возникла мысль разработать свой модулья. Который будет иметь следующие возможности:
1. Связывать можно будеть словари целиком (т.е. для каждого термина из словаря родителя, будут подгружаться все термины из связанного словаря (потомка)).
2. Более тонкая настройка. Связывание конкретных терминов для двух словарей.

А вывод форм с элементами управления при добавлении материала на сайт организовать с помощью AJAX (на JQuery)

Аватар пользователя gorr gorr 31 октября 2008 в 11:05

Лично я вижу два возможных варианта, а именно:
1) на базе указанных в настройках модуля упорядоченных друг относительно друга словарей строить новый словарь с полной их иерархией.
2) строить меню, структура которого содержит всю иерархию указанных в настройках модуля словарей и ссылки которого ведут на соответствующие страницы таксономии типа taxonomy/term/23+68+87

Второй вариант мне кажется менее гибким, что думают другие интересно.

Аватар пользователя direqtor direqtor 1 ноября 2008 в 5:23

Ну, один модуль подобного плана я уже написал. Он, в зависимости от страницы таксономии на которой стоит, строит для каждого словаря блок с терминами текущего уровня иерархии. Показываются только те термины в которых есть ноды. При выборе терминов из нескольких разных словарей показываются только ноды принадлежащие сразу всем выбранным терминам. Этакая перекрестная таксономия.

www.db.asiadata.ru/ru

Так что думаю, модуль для обозначенной проблемы тоже напишу.

Аватар пользователя dm66 dm66 28 ноября 2008 в 1:25

Я подобную задачу решил вообще без таксономии, при помощи текстовых полей CCK и Views.

1) Создаем тип материала: gorod.

2) Делаем 2 (можно и больше) тексовых поля CCK с выбором зараеннее указанных параметров. В настройках указываем возможные варианты:

Для поля город:

Moscow | Москва
Kiev | Киев

для поля магазин:

sport | Спортивные
prod | Продуктовые

далее содаем вид с отображением страницы по адресу: gorod, фильтруем по типу материала gorod, и в _арументы_ ставим наши текстовые поля.

В итоге при созданнии ноды будем при выборе видеть только "Москва, Киев" и "Спортивные, Продуктовые" а при просмотре страницы с красивым УРЛ типа site.ru/gorod/Moscow/sport будем видеть список материалов типа gorod, привязанных к Москве и Спортивные. И заметте, без помощи модуля pathauto.

Теперь для полной иерархичности в модуле pathauto указываем правило составления алиасов для нод с учетов указанных текстовых полей. И в итоге получим адрес ноды: gorod/Moscow/sport/nid. Все, у нас получилась как бы полная иерархичность. Осталось разобраться с меню и хлебными крошками (breadcrumbs). В 5-рке для этих целей я создавал меню со структурой сайта и аналогичной вложенностью, далее для привязки хлебных крошек нод использовал path2menu снипет который нужно вставить в template.php темы.

Примеры сайтов сделанных подобным образом: недвижимость в Турции и интернет магазин чугунные ванны. Сайты сделаны на 5-той версии движка. Сейчас перевожу на 6-ку.

Извините если немного сумбурно получилось.

Аватар пользователя direqtor direqtor 28 ноября 2008 в 2:49

"dm66" wrote:
Я подобную задачу решил вообще без таксономии, при помощи текстовых полей CCK и Views.
Есть еще Content Taxonomy, поле таксономии - его тут и нужно использовать...
"dm66" wrote:
Извините если немного сумбурно получилось.
Да всё вроде понятно, спасибо... Хотя я уже все по своему реализовал.

Аватар пользователя forest_run forest_run 30 ноября 2011 в 12:14

Ап! Уважаемый direqtor, поделитесь решением?

p.s. может появилось более чем за 2 года существования решение такой задачи?