spatie / menu
HTML 菜单生成器
Requires
- php: ^8.0
- spatie/url: ^2.0.0
Requires (Dev)
- larapack/dd: ^1.0
- pestphp/pest: ^1.22
- phpunit/phpunit: ^9.0
- vimeo/psalm: ^4.0
- dev-main
- 3.2.0
- 3.1.1
- 3.1.0
- 3.0.1
- 3.0.0
- v2.x-dev
- 2.10.3
- 2.10.2
- 2.10.1
- 2.10.0
- 2.9.0
- 2.8.0
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.1
- 2.4.0
- 2.3.1
- 2.3.0
- 2.2.2
- 2.2.1
- 2.2.0
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- 2.0.0-beta.4
- 2.0.0-beta.3
- 2.0.0-beta.2
- 2.0.0-beta.1
- v1.x-dev
- 1.4.0
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.0
- 0.6.6
- 0.6.5
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.0
- 0.1
This package is auto-updated.
Last update: 2024-09-17 07:24:52 UTC
README
spatie/menu
包为你的 PHP 应用程序提供了一种流畅的接口来构建任何大小的菜单。如果你使用 Laravel 构建应用程序,spatie/laravel-menu
提供了一些额外的功能。
如果你正在寻找一个更灵活且无渲染的解决方案,也许我们的精神继承者 Laravel Navigation 就是你要找的。
文档可在 https://docs.spatie.be/menu 查找。
从版本 1 升级?这里有升级指南!
支持我们
我们投入了大量资源来创建最优秀的开源软件包。您可以通过购买我们的付费产品之一来支持我们。
我们非常感激您从家乡给我们寄来明信片,并注明您正在使用我们哪个包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上。
人类可读、流畅的接口
所有类都提供了一种人类可读的、流畅的接口(无数组配置)。此外,您可以选择更详细和灵活的语法,或者方便的方法来覆盖大多数用例。
Menu::new() ->add(Link::to('/', 'Home')) ->add(Link::to('/about', 'About')) ->add(Link::to('/contact', 'Contact')) ->add(Html::empty()) ->render(); // Or just... Menu::new() ->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::new() ->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
为元素添加 id
您可以为元素添加 id,这样就可以轻松地使用 CSS 或 JS 定位这些元素。
Menu::new() ->id('navigation') ->add(Link::to('/', 'Home')->id('home-link')) ->add(Link::to('/about', 'About')) ->add(Link::to('/contact', 'Contact'))
<ul id="navigation"> <li><a href="/" id="home-link">Home</a></li> <li><a href="/about">About</a></li> <li><a href="/contact">Contact</a></li> </ul>
不怕深度
菜单支持子菜单,子菜单可以无限嵌套。
Menu::new() ->link('/', 'Home') ->submenu('More', Menu::new() ->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 spatie/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获取详细信息。
安全
如果您发现了关于安全的bug,请通过security@spatie.be发送邮件,而不是使用问题跟踪器。
明信片软件
您可以使用这个包,但如果它进入您的生产环境,我们非常感谢您从家乡寄给我们一张明信片,说明您正在使用我们的哪个包。
我们的地址是:Spatie,Kruikstraat 22,2018 安特卫普,比利时。
我们将所有收到的明信片发布在我们的公司网站上。
致谢
许可证
MIT许可证(MIT)。请参阅许可证文件获取更多信息。