2011-10-06 43 views
3

我遇到了一个相当复杂的问题,我需要树的行为来帮助。CakePHP树行为,每个表多棵树

我有一张名为nodes的表,该表已经有一棵树,这棵树用来构建一个菜单。

现在我们想让创建多个菜单成为可能,所以我制作了node_menusmenus表格。所以Nodes hasAndBelongsToMany Menus

但是有一个小问题,菜单是建立,但使用$this->Node->find('threaded')所以子菜单是可能的。所有节点都可以在多个菜单中使用,并且所有菜单都需要一棵树,因此可以对节点进行排序,并且也可以创建子菜单。

为此,我正在考虑为每个菜单创建一个包含树的表并将节点链接到树表中的每一行。

所以基本上我需要trees表与Trees belongsTo Nodes关系。在这棵树中我有menu_id,node_id,parent_id,lftrght

现在的问题是,多个树可能在一个表中?说,我想menu_id是15树。有可能使用find('threaded')与所述ID将返回所有的数据和节点相关的node_id的。包括创建和操作树的所有其他核心功能。

这可能吗?如果没有,有没有人有更好的解决方案,如何制作多个菜单,其中节点可以放置在多个菜单中,并可以进行排序和线程化?

回答

1

想想下面,然后你可以用一棵树来做。

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

+0

这可能会实现,你可以用它!我不知道为什么我总是觉得更复杂,然后我必须。所以我可以在菜单表中做到这一点,将节点与菜单项相关联,并通过查找孩子来检索树。这也会使管理变得更容易。我会试一试! –