monstergfx/menubuilder

适用于 Laravel4、Sentry2 和 Twitter Bootstrap 的菜单构建器和渲染器

v0.1.1beta 2014-03-05 17:29 UTC

This package is not auto-updated.

Last update: 2024-09-23 15:05:11 UTC


README

用于 Laravel 4、Twitter Bootstrap、Cartalyst/Sentry 2 和 Dark/SmartyView 的菜单构建器。

简介

在开发多个使用 Laravel4、Sentry2 和 Smarty 的项目时,我需要一个在图形界面中管理菜单的方法。过去,我曾在数据库中构建菜单表和菜单编辑器,但通常我不需要那么灵活(或那么大的开销)。

因此,这次我寻找一种在代码中定义菜单并自动生成菜单的方法。我想出的解决方案是 Menubuilder,我现在正在将其重构为一个包,我将将其用于多个项目。

请注意,此项目与我的需求高度契合,可能不适用于我的环境之外。

欢迎提交拉取请求。请注意,我正在使用 git flow 作为我的工作流程。不知道这是什么?请查看 http://jeffkreeftmeijer.com/2010/why-arent-you-using-git-flow/

或者看看这些屏幕录制

(上述链接可在 https://github.com/nvie/gitflow 中找到)。

使用方法

在代码中定义您的菜单

在您的代码中(无论在哪里),通过插入如下注释定义一个 menu

// @menu <menu text>|<menu icon>|>sort order>

或者在 docblock 中

/**
 * @menu <menu text>|<menu icon>|>sort order>
 */

例如:

// @menu Administration|icon-star|5

上面的行定义了一个标题为 "Administration" 的菜单,Twitter Bootstrap 的起始图标,排序顺序为 5(即它排在 0、1、2、3 和 4 之后)。

菜单项以类似的方式插入到您的代码中

// @menuitem <menu>|<item text>|<item icon>|<route>|<permissions>|<sort order>

或者

 /**
  * @menuitem <menu>|<item text>|<item icon>|<route>|<permissions>|<sort order>
  */

例如:

// @menuitem Administration|List Users|icon-user|list-users|user.list|3

这定义了一个在 "Administration" 菜单下的菜单项,文本为 "List Users",Twitter Bootstrap 的 "user" 图标,路由到 "list-users",需要 "user.list" 权限,并且排序顺序为 3。

以上两个示例结合给出一个看起来像这样的菜单

+------------------+
| * Administration |
+------------------+
| x List Users     |
+------------------+

(其中 'x' 是用户图标)。

生成菜单

菜单通过 artisan 命令生成

php artisan menu:make

此命令将扫描您的源文件,提取所有 @menu@menuitem 行,解析它们,并写入一个配置文件:app/config/menus.php

然后,该配置将在运行时用于生成菜单。

使用 menubuilder

menubuild 提供了一个生成适当菜单的方法:Menubuilder::build()

我在默认视图组合器中使用它,以确保每个页面自动构建菜单

View::composer('*',function($view){
	// add the menus (if any)
	$view->with('menus', Menu::build());
	// add other stuff here...
});

build() 方法返回一个看起来像这样的数组

Array
(
    [Administration] => Array
        (
            [icon] => icon-star
            [sort] => 5
            [items] => Array
                (
                    [0] => Array
                        (
                            [text] => List Users
                            [icon] => icon-user
                            [route] => list-users
                            [permission] => user.list
                            [sort] => 1
                        )
                    [1] => Array
                        (
                            [text] => Add New User
                            [icon] => icon-user
                            [route] => create-user
                            [permission] => user.edit
                            [sort] => 1
                        )
                )
        )
)

此菜单可以根据您的需要传递到视图中进行渲染。