Поведение дерева CakePHP, несколько деревьев в таблице - PullRequest
3 голосов
/ 06 октября 2011

Я столкнулся с довольно сложной проблемой, и мне нужно поведение дерева, чтобы помочь.

У меня есть таблица с именем nodes, у этой таблицы уже есть дерево, и это дерево используется для построения меню.

Теперь мы хотим сделать возможным создание нескольких меню, поэтому я создал таблицы node_menus и menus.Итак, Nodes hasAndBelongsToMany Menus

Однако есть небольшая проблема, меню построены, но используются $this->Node->find('threaded'), поэтому возможны подменю.Все узлы могут использоваться в нескольких меню, и все меню нуждаются в дереве, чтобы можно было упорядочивать узлы и создавать подменю.

Для этого я думал о создании одной таблицы, содержащей деревья для каждого меню исвяжите узел с каждой строкой в ​​древовидной таблице.

Так что в основном мне нужна таблица trees с отношением Trees belongsTo Nodes.В этом дереве у меня есть поля menu_id, node_id, parent_id, lft и rght.

Теперь вопрос в том, возможно ли несколько деревьев в одной таблице?Скажем, я хочу дерево, где menu_id равно 15. Можно ли использовать find('threaded') с указанным идентификатором, который будет возвращать все данные и узлы, связанные с node_id.Включая все остальные основные функции для создания и управления деревом.

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

1 Ответ

1 голос
/ 06 октября 2011

Подумайте, как показано ниже, тогда вы можете сделать это с одним деревом.

root[hidden node]
---- Menu 1
-------- Item 1.1
-------- Item 1.2
-------- Item 1.3
---- Menu 2
-------- Sub Menu 2.1
------------ Item 2.1.1
-------- Item 2.1
---- Menu 3
---- Menu 4
---- Menu 5

Я создал плагин для построителя меню для CakePHP, вы можете использовать его, если хотите :) https://github.com/torifat/cake-menu_builder

...