kamilsawicki/laravel-menu-builder

该软件包最新版本(dev-master)的许可证信息不可用。

Laravel 菜单构建器

dev-master 2023-10-02 19:04 UTC

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 并重写 buildidentifier 方法。

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>