我遇到了一个相当复杂的问题,我需要树的行为来提供帮助。
我有一个名为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的树。是否可以使用具有上述ID的find('threaded')
来返回所有数据和与node_id
相关的节点。包括创建和操作树的所有其他核心功能。
这可能吗?如果不是,是否有人在如何制作多个菜单方面有更好的解决方案,在这些菜单中可以将节点放置在可以排序和排列的多个菜单中?
最佳答案
像下面这样思考,那么您可以只用一棵树来做。
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