HTML 菜单生成器

1.0.0 2017-11-27 02:23 UTC

This package is auto-updated.

Last update: 2024-09-12 21:17:04 UTC


README

Build Status StyleCI

hoangphison/menu 包提供了一种流畅的接口,可以在您的 PHP 应用程序中构建任何大小的菜单。如果您正在使用 Laravel 构建 app,那么 hoangphison/laravel-menu 提供了一些额外的功能。

文档可在 https://docs.spatie.be/menu 查找。

从版本 1 升级?这里有升级指南!

人类可读的流畅接口

所有类都提供了一种人类可读的流畅接口(没有数组配置)。此外,您可以选择更详细、更灵活的语法,或者使用方便的方法来覆盖大多数用例。

Menu::newMenu()
    ->add(Link::to('/', 'Home'))
    ->add(Link::to('/about', 'About'))
    ->add(Link::to('/contact', 'Contact'))
    ->add(Html::empty())
    ->render();

// Or just...
Menu::newMenu()
    ->link('/', 'Home')
    ->link('/about', 'About')
    ->link('/contact', 'Contact')
    ->empty()
<ul>
    <li><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
    <li><a href="/contact">Contact</a></li>
    <li></li>
</ul>

或者更程序化的方法

菜单也可以通过类似 reduce 的可调用函数创建。

$pages = [
    '/' => 'Home',
    '/about' => 'About',
    '/contact' => 'Contact',
];

Menu::build($pages, function ($menu, $label, $url) {
    $menu->add($url, $label);
})->render();
<ul>
    <li><a href="/">Home</a></li>
    <li><a href="/about">About</a></li>
    <li><a href="/contact">Contact</a></li>
</ul>

对 HTML 输出有很强的控制能力

您可以通过编程方式向菜单中的任何项目或整个菜单添加 HTML 类和属性。

Menu::newMenu()
    ->addClass('navigation')
    ->add(Link::to('/', 'Home')->addClass('home-link'))
    ->add(Link::to('/about', 'About'))
    ->add(Link::to('/contact', 'Contact')->addParentClass('float-right'))
    ->wrap('div.wrapper')
<div class="wrapper">
    <ul class="navigation">
        <li><a href="/" class="home-link">Home</a></li>
        <li><a href="/about">About</a></li>
        <li class="float-right"><a href="/contact">Contact</a></li>
    </ul>
</div

不怕深度

该菜单支持子菜单,子菜单又可以无限嵌套。

Menu::newMenu()
    ->link('/', 'Home')
    ->submenu('More', Menu::newMenu()
        ->addClass('submenu')
        ->link('/about', 'About'))
        ->link('/contact', 'Contact'))
    );
<ul>
    <li><a href="/">Home</a></li>
    <li>
        More
        <ul class="submenu">
            <li><a href="/about">About</a></li>
            <li><a href="/contact">Contact</a></li>
        </ul>
    </li>
</ul>

为 Laravel 应用提供一些额外功能

菜单包的 Laravel 版本添加了一些额外功能,例如生成 URL 和宏的便利方法。

Menu::macro('main', function () {
    return Menu::new()
        ->action('HomeController@index', 'Home')
        ->action('AboutController@index', 'About')
        ->action('ContactController@index', 'Contact')
        ->setActiveFromRequest();
});
<nav class="navigation">
    {{ Menu::main() }}
</nav>

Spatie 是一家总部位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里

安装

您可以通过 composer 安装此包

$ composer require hoangphison/menu

用法

文档可在 https://docs.spatie.be/menu 查找。

升级到 2.0

对于大多数用例,升级到 2.0 应该非常简单。

如果您只是在构建菜单...

  • voidvoidIf 已被删除。这些可以用 htmlhtmlIf 替换,它们的第一个参数为空字符串。
  • prefixLinksprefixUrls 方法已被删除,因为它们在某些情况下太不可预测了。目前没有替代方案,除了编写自己的逻辑并用 applyToAll 应用。

如果您正在使用自定义 Item 实现...

  • HtmlAttributesParentAttributes 特性已被重命名为 HasHtmlAttributesHasParentAttributes
  • HasUrl 接口和特性已被删除。与 URL 相关的方法现在也是 Activatable 接口和特性的部分。

新功能...

  • 添加了静态 Menu::build 和非静态 Menu::fill 方法,用于从数组创建菜单。
  • Activatable 上的 setActive 方法现在也接受非严格布尔值或可调用参数来设置 $active 为 true 或 false。
  • Menu::htmlMenu::htmlIf 现在接受一个作为第二个参数的 $parentAttributes 数组。

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

测试

$ phpunit

贡献

有关详细信息,请参阅 CONTRIBUTING

安全

如果您发现任何安全相关的问题,请通过电子邮件 freek@spatie.be 而不是使用问题跟踪器。

明信片软件

您可以使用此软件包,但如果它进入了您的生产环境,我们非常希望您能从您的家乡给我们寄一张明信片,说明您正在使用我们的哪些包。

我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。

我们将所有收到的明信片发布在我们的公司网站上:点击查看

鸣谢

支持我们

Spatie 是一家总部位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里

您的业务是否依赖于我们的贡献?联系我们并在Patreon上支持我们。所有承诺都将专门用于分配人力进行维护和新酷炫功能的开发。

许可证

MIT许可证(MIT)。更多信息请参阅许可证文件