iatstuti/simple-menu

一个简单的Web应用程序菜单管理包。

安装: 23

依赖者: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 0

开放问题: 0

类型:实用工具

2.0.0 2016-02-01 05:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:47:39 UTC


README

Build Status Scrutinizer Code Quality

一个简单的菜单管理器。

目前有许多现成的菜单处理包可用,但它们通常过于复杂,对于只需要定义一个或多个菜单的简单场景来说是不必要的。

此包允许您通过管理器定义多个菜单,然后在渲染之前添加到项目中的链接。

安装

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键/值对作为选项传递给linksubMenu方法来定义排序顺序。您的菜单将自动按您定义的权重排序。

$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');
    }
}