delatbabel/nestedmenus

一个用于数据库存储嵌套菜单的Laravel 5包。

v1.1 2016-04-14 01:15 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:36:49 UTC


README

嵌套菜单的数据库存储,包括渲染

基于

包含

  • menus表提供的迁移
  • 菜单模型(它扩展了Baum/Node,因此您可以使用此出色的嵌套集实现的所有便捷方法)
  • 用于构建菜单节点的种子,每种类型的菜单一个

安装

将这些行添加到您的composer.json文件中

    "require": {
        "delatbabel/nestedmenus": "~1.0"
    },

完成此操作后,运行composer update命令

    composer update

或者只需运行此命令

    composer require delatbabel/nestedmenus

注册服务提供者

在composer update完成后,将此行添加到您的config/app.php文件中的'providers'数组

    Delatbabel\NestedMenus\NestedMenusServiceProvider::class

发布迁移

发布迁移

    php artisan vendor:publish

运行迁移

    php artisan migrate

确保在seeder文件中将types的类别设置正确。您可以将此初始化为任何您喜欢的值。

运行种子

运行种子(这将创建种子中定义的基本菜单结构)

    php artisan db:seed

您可能更喜欢根据MenusTableBaseSeeder中的代码创建自己的MenusTableSeeder类来生成自己的初始菜单集。

用法

此类依赖于Baum的后台功能。有关详细信息,请参阅github上的READMEBaum网站

创建菜单结构

有关在数据库中构建菜单结构的示例,请参阅MenustableBaseSeeder。实际上,您只需扩展此种子来创建自己的种子,只需重写getNodes()函数即可提供要注入数据库的菜单结构。

菜单编辑器等尚待完成。

数据库结构的重点部分如下所示(完成后)

+----+-----------+------+------+-------+----------------|----------------+-------------------------+-------+
| id | parent_id | lft  | rgt  | depth | slug           | name           | url                     | route |
+----+-----------+------+------+-------+----------------|----------------+-------------------------+-------+
|  1 |      NULL |    1 |   14 |     0 | example-menu   | Example Menu   |                         | NULL  |
|  2 |         1 |    2 |    3 |     1 | example-list   | Example List   | sysadmin/example        | NULL  |
|  3 |         1 |    4 |    5 |     1 | example-create | Example Create | sysadmin/example/create | NULL  |
|  4 |         1 |    6 |   13 |     1 | example-edit   | Example Edit   | sysadmin/example/edit   | NULL  |
|  5 |         4 |    7 |    8 |     2 | example-edit-1 | Example Edit 1 | sysadmin/example/edit/1 | NULL  |
|  6 |         4 |    9 |   10 |     2 | example-edit-2 | Example Edit 2 | sysadmin/example/edit/2 | NULL  |
|  7 |         4 |   11 |   12 |     2 | example-edit-3 | Example Edit 3 | sysadmin/example/edit/3 | NULL  |
+----+-----------+------+------+-------+----------------|----------------+-------------------------+-------+

请注意,目前可用的渲染器仅支持2级菜单结构。级别0是标题。级别1包含各种选项,级别2包含每个选项的子选项。

有关创建和操作此结构的更多详细信息,请参阅Baum函数

加载菜单结构

可以使用任何正常的Eloquent Model代码从数据库中加载菜单结构,例如

    $menu = \Delatbabel\NestedMenus\Models\Menu::where('slug', '=', 'example-menu')->first();

请注意,您只需加载菜单的最高级别即可渲染整个菜单。

渲染菜单结构

请参阅src/Console/Commands下的ShowMenu类,以了解如何进行此操作。这非常简单

    $renderer = new LavarySidebarRenderer();
    $rendered = $renderer->renderToHtml($menu);

渲染到不同的菜单结构需要不同的渲染器类。我将在一段时间内构建更多的这些类。

将渲染后的菜单放置在视图中就像这样

    return View::make("dashboard.example")
        ->with('sidebar_menu', $sidebar_menu);

待办事项

集成额外的菜单前端创建器。有几个。我已决定允许集成这两个

Lavary Menu

完成了一个LavarySidebarRenderer类。为了实现这一点,我不得不扩展Lavary菜单类,因此而不是使用它们的主要仓库,我使用了此包中composer.json中提到的VCS。我已经为此更改向Lavary仓库提交了PR。请参阅PR #100

需要为其他菜单类型(页头菜单、下拉菜单等)分别创建渲染器类。

Vespakoen 菜单

待定

架构

原因

我希望能够创建基于AdminLTE的菜单,看起来像这样

<!-- Sidebar Menu -->
<ul class="sidebar-menu">
    <li class="header">HEADER</li>
    <!-- Optionally, you can add icons to the links -->
    <li class="active"><a href="#"><i class='fa fa-link'></i> <span>Link</span></a></li>
    <li><a href="#"><i class='fa fa-link'></i> <span>Another Link</span></a></li>
    <li class="treeview">
        <a href="#"><i class='fa fa-link'></i> <span>Multilevel</span> <i class="fa fa-angle-left pull-right"></i></a>
        <ul class="treeview-menu">
            <li><a href="#">Link in level 2</a></li>
            <li><a href="#">Link in level 2</a></li>
        </ul>
    </li>
</ul><!-- /.sidebar-menu -->

我希望能够动态创建它们,而不是将它们嵌入到视图文件中。

我希望能够将菜单结构存储在数据库表中,以便在运行时修改或无需更改任何代码。

导入

在我成功使用Baum为我Nested Categories包处理后,它似乎对于菜单结构的层次存储是一个明显的选择。

唯一剩下的事情就是创建视图。我想有几个选择

  • 使用Laravel / Blade模板创建菜单,并将其作为部分导入到页面中。
  • 使用包创建菜单结构并格式化以进行显示。

我在网上找到了许多用于格式化菜单结构以进行显示的包,但我最终选择了这两个