如何创建动态导航菜单cakephp
如何从类别和子类别构建导航菜单,如下所示:
http://mysite/categories/view/1/2 我尝试过菜单构建器1.01但它只适用于acl用户. 解决方法
您的第一个链接不起作用.
坦率地说,我甚至不确定我理解你要做什么.你提供的第二个链接 – 我承认我只查看了第一个代码片段 – 不使用数据库表.如果您希望菜单是动态的,就像在基于控制器的操作中一样,这是有意义的.如果你希望它是“动态的”,就像动态控制你希望能够拥有CRUD访问权限的菜单项一样(你知道CRUD代表什么,对吗?),这是一个不同的(真的很简单)的故事. 这是可以想象的最基本,最简单的例子.在我的沙盒Cake 1.3.12安装中,我在十五分钟内将它们拼凑在一起.我很确定我已经更改了Cake 2约定的所有名称,但是可能需要进行一些调整.我试图将其削减到绝对基础,并尽可能保持代码清晰.根据你的需要进行构建.请参阅食谱并记住始终遵循蛋糕惯例. >创建一个名称类似于菜单的表. CREATE TABLE菜单( 型号代码 – Menu.php: <? class Menu extends AppModel { var $name = 'Menu'; } 控制器代码 – MenusController.php: <? class MenusController extends AppController { var $name = 'Menus'; function index() { if (isset($this->params['requested']) && $this->params['requested'] == true) { $menus = $this->Menu->find('all'); return $menus; } else { $this->set('menus',$this->Menu->find('all')); } } function add() { if (!empty($this->data)) { if ($this->Menu->save($this->data)) { $this->Session->setFlash(__('The menu item has been saved',true)); } } } // Build out additional CRUD functionality,// for example edit / view / delete,as desired. } 每个MenusController操作都需要/ view / menus /中的[action name] .ctp文件. 所以创建/views/menus/index.ctp和/views/menus/add.ctp.您放在/views/menus/index.ctp中的内容甚至不是非常重要,而/views/menus/add.ctp是您将用于根据需要添加新菜单项的表单: <div class="menus form"> <?php echo $this->Form->create('Menu');?> <fieldset> <legend><?php __('Add Menu Item'); ?></legend> <?php echo $this->Form->input('name'); echo $this->Form->input('controller'); echo $this->Form->input('action'); ?> </fieldset> <?php echo $this->Form->end(__('Submit',true));?> </div> 现在,创建/views/elements/menus/main.ctp: <ul class="header main-menu"> <? if (!isset($menus) || empty($menus)) : $menus = $this->requestAction('/menus/index'); endif; foreach($menus as $menu) : ?> <li> <?="<a href='".DS.$menu['Menu']['controller'].DS.$menu['Menu']['action']."'>".$menu['Menu']['name']."</a>"; ?> </li> <? endforeach; ?> </ul> 最后,将元素放在布局中,使其显示在每个页面上,而不管视图如何.如果您使用的是默认蛋糕布局,则表示您应该编辑/views/layouts/default.ctp.您可能希望将此项目放在合适的位置,例如< div id =“header”>元件.插入element()调用,如下所示: <div id="header"> <!-- whatever markup,code,etc. you may have in the header is fine. --> <?= $this->element('menus/main'); ?> </div> <!-- ...the rest of your layout continues... --> 可能需要在元素中添加样式以使其可读.根据需要将样式添加到您可能具有的任何样式表(默认为cake.generic.css). HTH. The cookbook是你的朋友. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |