icings/menu

为 CakePHP 开发的一个经过 KnpMenu 调味的菜单插件。

维护者

详细信息

github.com/icings/menu

源代码

问题

安装数量: 47,544

依赖关系: 1

建议者: 0

安全: 0

星标: 11

关注者: 4

分支: 7

公开问题: 1

类型:cakephp-plugin

5.0.0 2023-09-13 20:46 UTC

README

Build Status Coverage Status Latest Version Software License

这是一个KnpMenu 插件,帮助您为您的 CakePHP 应用程序创建菜单。

需求

  • CakePHP 5.0+(如果您需要与 CakePHP 4 兼容,请使用此插件的 4.x 分支
  • KnpMenu 3.3+

安装

  1. 使用 Composer 将菜单插件添加到您的项目中

    $ composer require icings/menu
  2. 确保您在引导文件中加载了插件,可以运行

    $ bin/cake plugin load Icings/Menu

    或者在 src/Application.php 文件的 Application 类的 bootstrap() 方法中添加以下调用

    $this->addPlugin('Icings/Menu');
  3. src/View/AppView.php 文件中 AppView 类的 initialize() 方法中加载助手

    $this->loadHelper('Icings/Menu.Menu');

使用方法

详细的用法文档可以在 docs 文件夹中找到。对于熟悉 CakePHP 和 KnpMenu 的用户,以下是快速入门的两个示例。

通过菜单助手

通过助手的 create()render() 方法构建和渲染菜单

$menu = $this->Menu->create('main');
$menu->addChild('Home', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'home']]);
$menu->addChild('About', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'about']]);

$menu->addChild('Services', ['uri' => '#']);
$menu['Services']->addChild('Research', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'research']]);
$menu['Services']->addChild('Security', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'security']]);

$menu->addChild('Contact', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'contact']]);

echo $this->Menu->render();

在默认设置中,这将生成以下 HTML

<ul>
    <li>
        <a href="/pages/display/home">Home</a>
    </li>
    <li>
        <a href="/pages/display/about">About</a>
    </li>
    <li class="has-dropdown">
        <a href="#">Services</a>
        <ul class="dropdown">
            <li>
                <a href="/pages/display/research">Research</a>
            </li>
            <li>
                <a href="/pages/display/security">Security</a>
            </li>
        </ul>
    </li>
    <li>
        <a href="/pages/display/contact">Contact</a>
    </li>
</ul>

直接使用库

除了使用菜单助手及其各种配置选项外,还可以手动使用此插件提供的库,并可选地将其与 KnpMenu 库结合使用

use Icings\Menu\Integration\PerItemVotersExtension;
use Icings\Menu\Integration\RoutingExtension;
use Icings\Menu\Integration\TemplaterExtension;
use Icings\Menu\Matcher\Matcher;
use Icings\Menu\Matcher\Voter\UrlVoter;
use Icings\Menu\MenuFactory;
use Icings\Menu\Renderer\StringTemplateRenderer;

$factory = new MenuFactory();
$factory->addExtension(new RoutingExtension());
$factory->addExtension(new PerItemVotersExtension());
$factory->addExtension(new TemplaterExtension());

$menu = $factory->createItem('main');
$menu->addChild('Home', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'home']]);
$menu->addChild('About', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'about']]);
$menu->addChild('Services', ['uri' => '#']);
$menu['Services']->addChild('Research', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'research']]);
$menu['Services']->addChild('Security', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'security']]);
$menu->addChild('Contact', ['uri' => ['controller' => 'Pages', 'action' => 'display', 'contact']]);

$matcher = new Matcher();
$matcher->addVoter(new UrlVoter($this->request));

$renderer = new StringTemplateRenderer($matcher);
echo $renderer->render($menu);

问题

请使用 问题跟踪器 报告问题。