Laravel Nova 如何调整侧边栏工具位置至指定资源下方
Laravel Nova 自定义侧边栏穿插资源与工具排布配置
Nova默认将所有无明确分组的工具统一放置在全部资源列表下方的渲染逻辑,可通过侧边栏分组绑定、排序权重配置实现资源与工具的穿插排布,不需要修改框架核心代码。
核心实现逻辑
Nova侧边栏的渲染规则为:
- 同分组下的元素按照设置的优先级/自定义权重从小到大排序,资源、工具两类元素没有本质的类型区别,都会参与同分组的排序
- 不同分组的元素不会互相穿插,会按照分组的先后顺序独立渲染
- 未手动设置分组的工具,会被自动归类到默认的Tools分组,排在所有带业务分组的元素之后
具体配置步骤
首先修改Analytics工具的分组配置,让它脱离默认的Tools分组,归入和其他资源一致的System分组
打开Analytics工具类,新增静态分组属性:// Analytics工具类文件 public static $group = 'System';配置同分组下元素的排序顺序,两种方式二选一即可:
方式一:逐个类设置优先级属性
给System分组下的所有元素按目标顺序设置
$priority属性,数值越小排序越靠前:- Activity资源设置优先级为1,排在分组列表第一位
// Activity资源类 public static $group = 'System'; public static $priority = 1; - Analytics工具设置优先级为2,刚好排在Activity资源下方
// Analytics工具类 public static $group = 'System'; public static $priority = 2; - 剩余的AdminPermission、Lead、Plan资源依次设置优先级为3、4、5,排在Analytics工具下方
// AdminPermission资源类 public static $group = 'System'; public static $priority = 3; // Lead资源类 public static $group = 'System'; public static $priority = 4; // Plan资源类 public static $group = 'System'; public static $priority = 5; - Matches工具不需要修改配置,因为没有手动设置分组,会自动排在所有带System分组的元素下方,也就是侧边栏最底部的默认工具区位置。
这种配置的优势是每个元素的排序归属于自身类的定义,模块独立性强,适合多人协作维护。
方式二:全局批量排序(适合不想逐个修改类属性的场景)
只需要保留Analytics工具的System分组配置,在
NovaServiceProvider的boot方法中通过全局排序规则定义同分组元素的顺序即可:// app/Providers/NovaServiceProvider.php public function boot() { parent::boot(); Nova::sortResourcesBy(function ($element) { // 自定义顺序映射,返回值越小排序越靠前 $orderMap = [ \App\Nova\Activity::class => 1, \App\Nova\Tools\Analytics::class => 2, \App\Nova\AdminPermission::class => 3, \App\Nova\Lead::class => 4, \App\Nova\Plan::class => 5, ]; return $orderMap[$element] ?? 999; }); }这种配置的优势是不需要逐文件修改类属性,调整顺序时只需要修改排序映射表即可,适合全局统一调整侧边栏结构的场景。
- Activity资源设置优先级为1,排在分组列表第一位
常见配置注意事项
- 如果给Analytics工具设置了分组还是排到最底部,检查工具类的
$group属性拼写是否和资源的System分组完全一致,包括大小写和空格,不匹配就会被自动归类到默认Tools分组 - 跨分组的元素不会参与同排序,比如Analytics如果还在Tools分组,哪怕设置了比Activity更高的优先级,也不会穿插到System分组的资源列表里
内容的提问来源于stack exchange,提问作者stalwart1014
相关产品推荐
相关产品推荐

