iatstuti / simple-menu
一个简单的Web应用程序菜单管理包。
Requires
- iatstuti/support: ~1.0
- illuminate/support: ~5.0
Requires (Dev)
- phpunit/phpunit: ~4.8
This package is not auto-updated.
Last update: 2024-09-14 18:47:39 UTC
README
一个简单的菜单管理器。
目前有许多现成的菜单处理包可用,但它们通常过于复杂,对于只需要定义一个或多个菜单的简单场景来说是不必要的。
此包允许您通过管理器定义多个菜单,然后在渲染之前添加到项目中的链接。
安装
composer require iatstuti/simple-menu=~2.0
基本用法
<?php use Iatstuti\SimpleMenu\Manager; $manager = new Manager(); $menu = $manager->init('main-menu'); $menu->link('Link label', 'http://example.com/link-label'); $menu->link('Another link', 'http://example.com/another-link'); $submenu = $manager->create('First sub menu') $submenu->link('First sub menu link', 'http://example.com/first-sub-menu-link'); $submenu->link('Second sub menu link', 'http://example.com/second-sub-menu-link'); $menu->addSubMenu($submenu);
菜单选项
如果您在不同的时间定义菜单选项,可以通过将weight
键/值对作为选项传递给link
和subMenu
方法来定义排序顺序。您的菜单将自动按您定义的权重排序。
$menu->link('Third link', 'http://example.com/third-link', [ 'weight' => 10, ]); $menu->link('Fourth link', 'http://example.com/fourth-link', [ 'weight' => 5, ]);
渲染时,第四个链接
将排在第三个链接
之前,并且两者都将出现在链接标签
、另一个链接
和上面定义的第一个子菜单
之后。子菜单项也将以类似的方式进行排序。
活动菜单项
有两种方式可以将项目标记为活动状态;要么通过选项,要么通过将active
方法链接到菜单链接。
// Via options $menu->link('Active link', 'http://example.com/active-link', [ 'active' => true, 'class' => 'active', ]); // Fluid interface $menu->link('Active link', 'http://example.com/active-link')->active();
菜单演示者
该包附带了一个默认的无序列表演示者。
如果您想创建自己的演示者,可以实施Iatstuti\SimpleMenu\Presenters\MenuPresenter
接口,提供一个render
方法。应通过演示者的构造函数提供Menu
对象。
该方法应该遍历您的菜单中的项目,递归渲染任何类型为Menu
的对象,并直接显示任何类型为MenuItem
的对象。
如果您想使用不同的演示者,请将类路径传递给Menu::render()
方法。
print $menu->render();
<ul> <li><a href="http://example.com/link-label" title="Link label">Link label</a></li> <li><a href="http://example.com/another-link" title="Another link">Another link</a></li> <li>First sub menu <ul> <li><a href="http://example.com/first-sub-menu-link" title="First sub menu link">First sub menu link</a></li> <li><a href="http://example.com/second-sub-menu-link" title="Second sub menu link">Second sub menu link</a></li> </ul> </li> <li><a href="http://example.com/fourth-link" title="Fourth link">Fourth link</a></li> <li><a href="http://example.com/third-link" title="Third link">Third link</a></li> </ul>
Laravel中的使用
此包包括一个服务提供者和外观,可以在Laravel框架中使用。如果您想在主AppServiceProvider
中定义主菜单,但想在应用程序的其他部分定义附加菜单项(例如,在不同的模块中,它们有自己的服务提供者),这很有用。
注意您必须将SimpleMenuServiceProvider
包含在所有可能需要使用该功能的其他提供者之前。
首先,将服务提供者添加到您的config/app.php
提供者数组中
'providers' => [ // ... Iatstuti\SimpleMenu\SimpleMenuServiceProvider::class, ]
如果您愿意,可以将SimpleMenu
外观添加到您的别名单组中
'aliases' => [ // ... Iatstuti\SimpleMenu\Facades\SimpleMenu::class, ]
然后您可以在AppServiceProvider
中注册您的第一个菜单
public function register() { SimpleMenu::init('main-navigation'); }
您可以在应用程序中定义所需的不同菜单数量;例如,您可能还有一个具有自己的菜单项的sidebar-navigation
。
在将项目添加到导航菜单时,您需要在提供者的boot
方法中执行此操作
class AnotherServiceProvider extends ServiceProvider { public function boot() { $menu = SimpleMenu::getMenu('main-navigation') $menu->link('First item', 'http://example.com/first-item'); $menu->link('Second item', 'http://example.com/second-item'); } }