English 中文(简体)
在CakePHP中创建动态数据库驱动菜单的最佳方法是什么?
原标题:
  • 时间:2009-03-05 08:41:06
  •  标签:

I want to display a menu on every page that is run from a database. Using just down and dirty php thats easy but I want to integrate it with cakephp using their MVC system. Now my question is how is the best way to go about this?

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

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

谢谢 (xiè xiè)

沃尔特

最佳回答

模型应该从其建模的表中提取和处理数据,因此为每个模型提取菜单数据。

组件被设计用于容纳多个控制器共享的逻辑,因此一个被所有控制器使用的菜单组件似乎是一个很好的地方,用于放置从模型获取菜单数据并将其集成的代码。

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

问题回答

我同意neilcrooks的答案,但想添加一些内容以便清楚明白。

助手和元素是相当简单的,只是助手可能会更加强大(至少我是这样认为的;))。因此,如果使用助手,则可以在运行时绑定和解除绑定模型关联,从而允许您从(暂时)关联的模型中获取数据。

就我个人而言,我喜欢肥模型和瘦控制器,所以如果我处在这种情况下,我会使用一个辅助程序并暂时将模型绑定到它上面。任何需要从现有模型获取的数据都将通过Model1->fetchMenuPart(...)类型的调用访问。

然后您可以从布局文件中调用您的帮助程序。

我不知道为什么这个地方没有记录,但我昨晚刚发现了这个。您的布局或元素的变量必须以_ for_layout结尾进行定义。例如:$this->set(categories_for_layout,$this->Category->find(all));

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

这是我在互联网上搜寻这个问题时发现的一个非常好的解决方案。

将此翻译成中文:http://articles.classoutfit.com/cakephp-dynamic-navigation-bars/ http://articles.classoutfit.com/cakephp-dynamic-navigation-bars/

I think you would use create an element that would hold the html for the menu and then render the menu in your layout.

echo $this->element( your menu );

为了使其具有动态性,您可以在控制器中将菜单链接设置为数组。

i have found one good article here http://www.milestree.com/webdev/cakephp/dynamic_menu





相关问题
热门标签