我想在从数据库运行的每个页面上显示一个菜单。使用肮脏的 php 很简单,但我想使用他们的 MVC 系统将它与 cakephp 集成。现在我的问题是最好的方法是什么?

我的想法是创建一个具有布局的元素,然后创建一个用于所有逻辑的组件或控制器。对此有什么建议吗?或者我想使用一个助手?

我还需要从数据库中的多个表中获取所有数据。最好通过一个模型完成所有数据收集逻辑吗?或者在菜单控制器(或组件)中完成大部分操作并使用每个表的模型?

谢谢你,

瓦尔特

有帮助吗?

解决方案

模型应该从他们正在建模的表中获取和处理数据,因此获取该模型中每个模型的菜单数据。

组件用于容纳多个控制器共享的逻辑,因此所有控制器使用的菜单组件听起来都是放置代码以从模型中获取菜单数据并将其混合在一起的好地方。

菜单通常是一个嵌套列表,如果你的菜单也是如此,输出标记的最简单方法是递归函数(一个自己调用的函数),它一次输出一个级别,所以而不是一个元素,我只是在那里创建一个带有menu()方法的帮助器,并直接从布局中调用它。

其他提示

我同意尼尔克鲁克斯的回答,但为了清楚起见,我想添加一些内容。

助手和元素非常简单,只是助手可以更强大一些(至少,我是这么认为的;))。因此,如果您使用助手,您可以动态绑定和取消绑定模型关联——这将允许您从(临时)关联的模型中获取数据。

就我个人而言,我喜欢胖模型和瘦控制器,所以我想如果我处于这种情况,我会使用一个助手并将模型临时绑定到它。我需要从现有模型中获取的任何数据都可以通过 Model1->fetchMenuPart(...) 类型调用来访问。

然后您可以从布局文件调用您的助手。

我不知道为什么在任何地方都没有记录,但我昨晚才发现这一点。必须使用结尾_for_layout定义布局或元素的变量。例如:$ this-> set('categories_for_layout',$ this-> Category-> find('all'));

我在AppController类中使用了beforeFilter方法,因为我在每个页面都需要该菜单。

这是我在互联网上搜索此内容时发现的一个很好的解决方案。

http://articles.classoutfit.com/cakephp-dynamic-navigation-棒/

我认为你会使用创建一个元素来保存菜单的html,然后在你的布局中渲染菜单。

echo $this->element('your menu');

要使其动态化,您可以设置菜单链接,也可以作为控制器中的数组。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top