hoangphison / menu
HTML 菜单生成器
Requires
- php: >=5.6
- hoangphison/url: ^1.0.0
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is auto-updated.
Last update: 2024-09-12 21:17:04 UTC
README
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 应该非常简单。
如果您只是在构建菜单...
void和voidIf已被删除。这些可以用html和htmlIf替换,它们的第一个参数为空字符串。prefixLinks和prefixUrls方法已被删除,因为它们在某些情况下太不可预测了。目前没有替代方案,除了编写自己的逻辑并用applyToAll应用。
如果您正在使用自定义 Item 实现...
HtmlAttributes和ParentAttributes特性已被重命名为HasHtmlAttributes和HasParentAttributes。HasUrl接口和特性已被删除。与 URL 相关的方法现在也是Activatable接口和特性的部分。
新功能...
- 添加了静态
Menu::build和非静态Menu::fill方法,用于从数组创建菜单。 Activatable上的setActive方法现在也接受非严格布尔值或可调用参数来设置$active为 true 或 false。Menu::html和Menu::htmlIf现在接受一个作为第二个参数的$parentAttributes数组。
变更日志
请参阅 CHANGELOG 了解最近更改的详细信息。
测试
$ phpunit
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全
如果您发现任何安全相关的问题,请通过电子邮件 freek@spatie.be 而不是使用问题跟踪器。
明信片软件
您可以使用此软件包,但如果它进入了您的生产环境,我们非常希望您能从您的家乡给我们寄一张明信片,说明您正在使用我们的哪些包。
我们的地址是:Spatie,Samberstraat 69D,2060 安特卫普,比利时。
我们将所有收到的明信片发布在我们的公司网站上:点击查看。
鸣谢
支持我们
Spatie 是一家总部位于比利时安特卫普的网页设计公司。您可以在我们的网站上找到我们所有开源项目的概述 在这里。
您的业务是否依赖于我们的贡献?联系我们并在Patreon上支持我们。所有承诺都将专门用于分配人力进行维护和新酷炫功能的开发。
许可证
MIT许可证(MIT)。更多信息请参阅许可证文件。