martinbean/laravel-menu-builder

适用于 Laravel 5.x 的菜单构建器包。

v0.2.0 2016-04-14 09:26 UTC

This package is auto-updated.

Last update: 2024-09-20 21:23:04 UTC


README

一个简单的 Laravel 5.x 菜单构建器包

安装

Composer

此包可以通过 Composer 安装。从命令行运行以下命令

$ composer require martinbean/laravel-menu-builder

用法

菜单构建器由两个模型组成:MenuMenuItem。一个 Menu 有多个 MenuItem 实例,而一个 MenuItem 会将其自身转换为你的应用程序中的模型。因此,你需要做一些链接才能使菜单构建器正常工作。

假设你有一个 Page 模型。你需要像这样实现 Navigatable 接口

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use MartinBean\MenuBuilder\Contracts\Navigatable as NavigatableContract;

class Page extends Model implements NavigatableContract
{
    protected $table = 'pages';
}

添加接口意味着你需要在你的模型类上实现两个方法。这两个方法是 getTitle()getUrl()

在你的理论上的 Page 模型中,可以这样实现

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use MartinBean\MenuBuilder\Contracts\Navigatable as NavigatableContract;

class Page extends Model implements NavigatableContract
{
    protected $table = 'pages';

    public function getTitle()
    {
        return $this->title;
    }

    public function getUrl()
    {
        return route('page.show', [$this->slug]);
    }
}

对于 getTitle(),我们只是返回模型 title 属性的值;对于 getUrl(),我们使用 Laravel 的 route() 助手返回一个路由。

该接口意味着你可以将任何现有的模型变成菜单项,只要它们公开标题和 URL。这使得菜单构建器非常灵活,类似于 WordPress(这个包受到了其启发)中的菜单项可以是帖子、页面、分类等。

渲染菜单

菜单的渲染是通过呈现器类完成的。这意味着你可以通过创建新的呈现器来更改菜单的渲染方式。

开箱即用,该包包含一个 UnorderedListPresenter 类。正如其名称所示,它将菜单渲染为一个普通的 HTML 无序列表(<ul>)元素。

你可以创建自己的呈现器:你所需要做的就是实现 Presenter 合约,这将强制你实现三个方法

  • render()
  • hasItems()
  • getItems()

你的呈现器也应该有一个构造函数,它接受一个 Menu 实例作为参数。

请查看 UnorderedListPresenter 类的源代码以获取实现这些方法的示例。

在模板中显示菜单

Menu 模型被添加到 Laravel 的容器中,并通过外观公开,使其在模板中可用。要渲染菜单,你可以简单地调用

{!! Menu::build(1) !!}

其中第一个参数是你想要渲染的菜单的 ID(主键值)。还有一个可选的第二个参数,它是你想要使用的呈现器类,如果你不想使用默认的 UnorderedListPresenter 类。

CRUD

你还需要实现自己的 CRUD 程序来构建菜单。

问题

如果你对这个包有任何问题,请创建一个 新问题

许可

MIT 许可证 下许可。