ryangjchandler/filament-navigation

在Filament中构建结构化导航菜单。


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此Filament插件提供了一个Navigation资源,允许您使用简洁的拖放UI构建结构化导航菜单。

安装

首先通过Composer安装此包。

composer require ryangjchandler/filament-navigation

运行迁移。

php artisan migrate

发布包的资产。

php artisan filament:assets

用法

您首先需要将插件与Filament进行注册。这可以在您的PanelProvider(例如AdminPanelProvider)内部完成。

use RyanChandler\FilamentNavigation\FilamentNavigation;

return $panel
    ->plugin(FilamentNavigation::make());

如果您想自定义导航组、排序或图标,可以使用NavigationResource::navigationGroup()NavigationResource::navigationSort()NavigationResource::navigationIcon()方法。

数据结构

每个导航菜单都需要有一个namehandle。该handle应该是唯一的,并用于检索菜单。

项存储在一个名为items的JSON列中。这是一个类似如下所示的递归数据结构:

[
    {
        "label": "Home",
        "type": "external-link",
        "data": {
            "url": "/",
            "target": "_blank",
        },
        "children": [
            // ...
        ],
    }
]

递归结构使得渲染嵌套菜单/下拉菜单变得非常简单。

<ul>
    @foreach($menu->items as $item)
        <li>
            {{ $item['label'] }}

            @if($item['children'])
                <ul>
                    {{-- Render the item's children here... --}}
                </ul>
            @endif
        </li>
    @endforeach
</ul>

检索导航对象

要检索导航对象,请将句柄提供给RyanChandler\FilamentNavigation\Models\Navigation::fromHandle()方法。

use RyanChandler\FilamentNavigation\Models\Navigation;

$menu = Navigation::fromHandle('main-menu');

自定义项目类型

默认情况下,此插件包含一个名为“外部链接”的单个项目类型。此项目类型期望提供一个URL和一个可选的“目标”(同一选项卡或新选项卡)。

可以通过自定义项目类型扩展插件。自定义项目类型有一个名称和一个数组,其中包含要在“项目”模态中显示的Filament字段对象(或一个生成数组的Closure)。

此API允许您将导航菜单与您的应用程序的实体和模型进行深度集成。

return $panel
    ->plugin(
        FilamentNavigation::make()
            ->itemType('post', [
                Select::make('post_id')
                    ->//...
            ])
    );

所有自定义字段都可以在项目的data属性中找到。

全局自定义字段

可能存在这样的情况,您希望所有项目类型都有一个额外的字段集。这对于类、自定义ID等很有用。

要注册全局自定义字段,请使用插件对象的withExtraFields()方法。

return $panel
    ->plugin(
        FilamentNavigation::make()
            ->withExtraFields([
                TextInput::make('classes'),
            ]),
    );

Navigation字段类型

此插件还提供了一个自定义的Filament字段,可以在其他表单和资源中选择搜索导航菜单。

use RyanChandler\FilamentNavigation\Filament\Fields\NavigationSelect;

->schema([
    NavigationSelect::make('navigation_id'),
])

默认情况下,此字段不可搜索,每个选项的值将是菜单的id

要使字段可搜索,请调用->searchable()方法。

->schema([
    NavigationSelect::make('navigation_id')
        ->searchable(),
])

如果您想更改每个选项的值,请调用->optionValue()方法。

->schema([
    NavigationSelect::make('navigation_id')
        ->optionValue('handle'),
])

测试

composer test

更改日志

有关最近更改的更多信息,请参阅CHANGELOG

贡献

有关详细信息,请参阅CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅我们的安全策略

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。