kamilsawicki / laravel-menu-builder
Laravel 菜单构建器
Requires
- ext-tidy: *
This package is not auto-updated.
Last update: 2024-10-01 22:04:02 UTC
README
关于
为 Laravel 10 应用程序提供简单的 Laravel 菜单构建器。
需求
PHP >= 8.2, Tidy 扩展。
如何使用
安装
将以下内容添加到 app.php 中 providers 列表:\KamilSawicki\LaravelMenuBuilder\Providers\LaravelMenuBuilderProvider::class,
。
用法
仅扩展 AbstractMenuBuilder
并重写 build
和 identifier
方法。
AbstractMenuBuilder 类
build(): void
包含菜单项的定义。您可以使用 self::add() 方法添加具有 Item::class 的新对象。
identifier(): string
应返回字符串,该字符串默认用作根元素的 id 和缓存键。
string $itemTemplate
菜单第一级使用的 blade 项目模板的路径。
string $childTemplate
菜单其他级别使用的 blade 项目模板的路径。如果为 null,则使用 $itemTemplate
。
string $wrapperTemplate
包含整个项目的 blade 模板的路径。
string $childWrapperTemplate
包含整个子级菜单项的 blade 模板的路径。如果为 null,则使用 $wrapperTemplate
。
Item 类
new(string $label, string $path = '#', bool $external = false): self
类静态构造函数。接受参数 label
(必需),path
(可选,默认 #
)- 路由名称或 URL(如果 external
(可选,默认 false
)为 true
)。
if(bool $expression): self (快捷方式) 和 setToRender(bool $toRender): self
接受布尔表达式定义项目在渲染时不应被过滤。
setClass(string $class): self
<a>
元素的 HTML 类。
addChildren(Item $child): self 和 setChildren(array|Collection $children): self
将 Item::class 添加到树形菜单的子级。 addChildren
setAttr(array $attr): self
<a>
元素上的自定义属性列表。以 key="value"
的形式渲染。
setOptions(array $options): self
传递到视图中的自定义变量,可以在自定义模板中使用。
示例
class ExampleMenuBuilder extends AbstractMenuBuilder { protected function build(): void { $this->add(Item::new('Item 1', 'page_one')); $this->add(Item::new('Item 2', 'page_two')); $this->add(Item::new('Folder') ->addChildren(Item::new('SubItem 1', 'folder.sub_page_one')) ->addChildren(Item::new('SubItem 2', 'folder.sub_page_two')) ); $this->add(Item::new('Hidden')->if(1 == 0)); $this->add(Item::new('Red class')->setClass('red')); $this->add(Item::new('Custom view var')->setOptions([ 'custom-var' => 'test', ])); $this->add(Item::new('Custom attribute') ->setAttr(['custom-attr' => 'custom value']) ); } protected function identifier(): string { return 'example_menu'; } }
将被渲染为
<ul id="example_menu"> <li> <a href="https:///page_1">Item 1</a> </li> <li> <a href="https:///page_2">Item 2</a> </li> <li> <a href="#">Folder</a> <ul> <li> <a href="https:///folder/sub_page_1">SubItem 1</a> </li> <li> <a href="https:///folder/sub_page_2">SubItem 2</a> </li> </ul> </li> <li> <a href="#" class="red">Red class</a> </li> <li> <a href="#">Custom view var</a> </li> <li> <a href="#" custom-attr="custom value">Custom attribute</a> </li> </ul>