导航
概述
默认情况下,Filament 会为每一个 资源类 和 自定义页面 注册导航菜单。这些类中包含一些你可以重写的静态属性和静态方法,用以配置导航菜单和显示顺序:
自定义导航项标签
默认情况下,导航标签由资源或者页面的名字生成,你可以使用 $navigationItems
属性自定义该标签:
protected static ?string $navigationLabel = 'Custom Navigation Label';
此外,你也可以重写 $getNavigationLabel()
方法:
public static function getNavigationLabel(): ?string
{
return 'Custom Navigation Label';
}
自定义导航项图标
你可以重写资源和页面类页面中的 $navigationIcon
属性,自读八卦图导航菜单项的图标:
protected static ?string $navigationIcon = 'heroicon-o-document-text';
激活时切换导航菜单图标
使用 $activeNavigationIcon
属性,可以分配一个仅用于激活项的导航图标:
protected static ?string $activeNavigationIcon = 'heroicon-o-document-text';
导航项排序
默认情况下,导航项按照字母顺序排序,你可以使用 $navigationSort
属性自定义排序:
protected static ?int $navigationSort = 3;
限制,使用低数值导航项会出现在高数值的前面 - 排序是升序的。
添加徽章到导航项
要在导航菜单项中添加徽章,可以使用 getNavigaionBadge()
方法,返回徽章内容:
public static function getNavigationBadge(): ?string
{
return static::getModel()::count();
}
public static function getNavigationBadgeColor(): ?string
{
return static::getModel()::count() > 10 ? 'warning' : 'primary';
}
导航项分组
你可以通过指定资源类resources 和 自定义页面的 $navigationGroup
属性对导航菜单项进行分组:
protected static ?string $navigationGroup = 'Settings';
在同一个导航分组中的所有菜单项会被集中到同一个分组标签下显示,比如本例的 "Settings"。未分组的菜单项会被保留在侧边栏顶部。
自定义导航分组
你可以在配置中调用 navigationGroups()
,并按顺序传入 NavigationGroup
对象来自定义导航分组:
use Filament\Navigation\NavigationGroup;
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->navigationGroups([
NavigationGroup::make()
->label('Shop')
->icon('heroicon-o-shopping-cart'),
NavigationGroup::make()
->label('Blog')
->icon('heroicon-o-pencil'),
NavigationGroup::make()
->label('Settings')
->icon('heroicon-o-cog-6-tooth')
->collapsed(),
]);
}
本例中,我会传入了自定义的图标 icon()
,并使其中一个默认是折叠的 collapsed()
。
导航分组排序
$panel
->navigationGroups([
'Shop',
'Blog',
'Settings',
])
使导航分组不可折叠
默认情况下,导航分组是可折叠的。你可以通过调用 NavigationGroup
对象上的 collapsible(false)
可以禁用该行为:
use Filament\Navigation\NavigationGroup;
NavigationGroup::make()
->label('Settings')
->icon('heroicon-o-cog-6-tooth')
->collapsible(false);
或者,你也可以在配置中让所有的分组全局生效:
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->collapsibleNavigationGroups(false);
}
在桌面端折叠侧边栏
要让桌面端的侧边栏像移动端一样可折叠,你可以使用配置:
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->sidebarCollapsibleOnDesktop();
}
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->sidebarFullyCollapsibleOnDesktop();
}
注册自定义导航菜单项
你可以在配置中注册自定义导航菜单:
use Filament\Navigation\NavigationItem;
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->navigationItems([
NavigationItem::make('Analytics')
->url('https://filament.pirsch.io', shouldOpenInNewTab: true)
->icon('heroicon-o-presentation-chart-line')
->group('Reports')
->sort(3),
// ...
]);
}