lotos2512 / menu-and-breadcrumbs-generator
菜单和面包屑生成器
1.0.3
2018-11-21 10:10 UTC
Requires
- php: >=7.2.0
Requires (Dev)
- php: >=7.2.0
This package is not auto-updated.
Last update: 2024-09-19 16:08:24 UTC
README
从PHP数组生成HTML菜单和面包屑
安装
安装此扩展的首选方式是通过 Composer。
可以运行
php composer.phar require lotos2512/menu-and-breadcrumbs-generator
示例
https://github.com/lotos2512/menu-and-breadcrumbs-generator/blob/master/example/index.php
菜单的基本用法
// Create array like this $tree = [ /** * СООБЩЕНИЯ */ 'personal_messages.php' => [ 'name' => function () { return 'Сообщений 10/10'; }, 'children' => [ 'test' => [ 'name' => 'тest - ', 'url' => '/admin/test', 'permission' => true, 'params' => ['package_id'], 'namePostFix' => 'package_id', ], 'test2' => [ 'name' => 'тest', 'url' => '/admin/test2', 'visible' => 'onPage' ], ] ], ]; $menu = (new MenuGenerator('/admin/test2', $tree))->getMenu();
定义键
name - 节点的名称,接受字符串或回调函数(必需)。
url - 节点的URL。接受字符串值。
permission - 用于节点权限。接受布尔值或回调函数。
params - 字符串值的数组,如果节点URL是当前页,将会添加到$_GET参数到URL中。
namePostFix - 字符串值,如果URL是当前页,将会从$_GET中获取值并添加到节点名称中。
children - 节点的数组。
visible - 字符串值 Node::VISIBLE_TYPE_CURRENT_PAGE,用于在URL是当前页时显示节点。
面包屑的基本用法
$breadcrumbs = (new BreadcrumbsGenerator(new RecursiveBreadcrumbsStrategy(), '/admin/update_transaction.php', $tree))->getBreadcrumbs(); $breadcrumbs = (new BreadcrumbsGenerator(new PrettyUrlBreadcrumbsStrategy(), '/admin/update_transaction.php', $tree))->getBreadcrumbs(); // use RecursiveBreadCrumbsStrategy to create $breadcrumbs for the node, even if the tree is wrong like $tree.
如果$tree为true,使用PrettyUrlBreadcrumbsStrategy为节点创建$breadcrumbs。例如,如果您想为URL - '/cryptography/certificates/view/?id=1' 找到面包屑,则您的树必须如下所示
[ 'cryptography' => [ 'permission' => function () { return true; }, 'name' =>'Криптография', 'children' => [ 'certificates' => [ 'name' =>'Сертификаты', 'url' => '/cryptography/certificates', 'children' => [ 'name' =>'Сертификат', 'url' => '/cryptography/certificates/view/', 'visible' => Node::VISIBLE_TYPE_CURRENT_PAGE, ] ], 'create-request' => [ 'name' =>'Запрос сертификата', 'url' => '/cryptography/create-request', ], 'upload-signed-certificates' => [ 'name' =>'Загрузка подписанных сертификатов', 'url' => '/cryptography/upload-signed-certificates', ] ], ], ]
自定义菜单节点的HTML
/** * Class YouMenuGenerator */ YourMenuGenerator extends MenuGenerator { /** * @see MenuGenerator::getHtmlBlock */ protected function getHtmlBlockParams(Node $node, int $level): array { return [ 'tdClass' => $node->quailsUrl($this->url) === true ? ' class ="select"' : ' ', 'menuClass' => "menu$level", 'url' => $node->getUrlWithParams($this->url), 'name' => $node->getNameWithPostFix($this->url), ]; } protected function htmlTemplate(): string { return '<tr> <td tdClass> <div class="menuClass"> <a href="url">name</a> </div> </td> </tr>'; } }