我遇到了一个相当复杂的问题,我需要树的行为来帮助。
我有一个名为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')
与所述ID一起使用,该ID将返回与node_id
相关的所有数据和节点。包括创建和操作树的所有其他核心功能。
这可能吗?如果没有,有没有人有更好的解决方案如何制作多个菜单,其中节点可以放在多个菜单中,可以订购和线程?
答案 0 :(得分: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