9

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

我的想法是用布局制作一个元素,然后为所有逻辑制作一个组件或控制器。对此有何建议?或者是我想要使用的助手?

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

谢谢,

沃尔特

4

6 回答 6

7

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

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

菜单通常是嵌套列表,如果您的菜单也是这种情况,那么输出标记的最简单方法是递归函数(一个调用自身的函数),它一次输出一个级别,而不是元素,我只需在其中创建一个带有 menu() 方法的助手,然后直接从布局中调用它。

于 2009-03-05T09:40:57.480 回答
4

我同意 neilcrooks 的回答,但为了清楚起见,我想添加一些内容。

助手和元素非常简单,除了助手可以更健壮一些(至少,这就是我对他们的看法;))。因此,如果您使用帮助程序,您可以即时绑定和取消绑定模型关联——这将允许您从(临时)关联模型中获取数据。

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

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

于 2009-03-05T16:54:06.017 回答
1

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

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

于 2009-05-31T23:12:51.463 回答
1

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

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

于 2010-08-28T18:32:53.827 回答
0

我想你会使用创建一个元素来保存菜单的 html,然后在你的布局中呈现菜单。

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

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

于 2009-03-13T07:30:01.537 回答
0

我在这里找到了一篇好文章 http://www.milestree.com/webdev/cakephp/dynamic_menu

于 2009-12-06T00:35:53.817 回答