duscarvalho/filament-navigation

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

dev-main 2023-09-18 19:44 UTC

This package is not auto-updated.

Last update: 2024-10-01 22:40:03 UTC


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 duscarvalho\FilamentNavigation\FilamentNavigation;

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

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

数据结构

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

项目存储在一个名为 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>

检索导航对象

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

use duscarvalho\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 duscarvalho\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)。请参阅许可文件获取更多信息。