gpt4 book ai didi

cakephp - 如何创建动态导航菜单cakephp

转载 作者:行者123 更新时间:2023-12-01 06:57:25 28 4
gpt4 key购买 nike

如何从类别和子类别构建导航菜单,如下所示:

http://mysite/categories/view/1/2

我尝试过菜单生成器 1.01,但它只适用于 acl 用户。
我也读过这个 tutorial ,但这没有帮助。

最佳答案

您的第一个链接不起作用。

坦率地说,我什至不确定我是否理解你想要做什么。您提供的第二个链接 - 我承认我只看过第一个代码片段 - 不使用数据库表。如果你希望你的菜单是动态的,就像基于 Controller Action 一样,这是有道理的。如果您希望它是“动态的”,例如对您希望能够获得 CRUD 访问权限的菜单项进行动态控制(您知道 CRUD 代表什么,对吗?),这是一个不同的(真的很简单)故事.

这是可以想象到的最基本、最简单的例子。在我的沙箱 Cake 1.3.12 安装中,我真的在 15 分钟内将它组合在一起。我很确定我已经更改了 Cake 2 约定的所有名称,但是可能需要进行一些调整。我试图将其精简到绝对基础,并尽可能保持代码清晰。构建它,因为它适合你。请参阅食谱并记住始终遵循 Cake 惯例。

  • 创建一个名称类似于 menus 的表.
  • 创建一个名为 menu.php 的模型.
  • 创建一个 MenusController.php .
  • 创建 /Views/Menus目录,和 /views/Elements/Menus .

    创建表 menus (
    id int(11) 无符号 NOT NULL auto_increment,
    name varchar(255) NOT NULL 默认值 '',
    controller varchar(255) 非空,
    action varchar(255) 非空,
    created日期时间不为空,
    modified日期时间默认NULL,
    主键 ( id )
    ) 引擎=InnoDB 默认字符集=utf8;

  • 型号代码 - Menu.php:
    <?
    class Menu extends AppModel {
    var $name = 'Menu';
    }

    Controller 代码 - 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 操作都需要一个 [操作名称].ctp 文件,位于 /view/menus/ .

    所以创建 /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>

    最后,放置 元素 布局所以它出现在每一页上,无论 View 如何。如果您使用默认蛋糕布局,则意味着您应该编辑 /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)。

    哈。 The cookbook是你的 friend 。

    关于cakephp - 如何创建动态导航菜单cakephp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8386031/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com