Laravel Nova - 重新排序左侧导航菜单项
Laravel Nova - Reorder left navigation menu items
默认情况下,左侧菜单项的顺序是按字母顺序排列的。
我的客户想手动订购这些菜单。知道如何让它成为可能吗?
转到
如果有帮助,您可以使用分组。我知道这不是 100% 的修复,但也许会有所帮助。
public static $group = 'Admin';
你可以在
App\Providers\NovaServiceProvider.php
添加方法 resources() 并手动注册资源,如
protected function resources()
{
Nova::resources([
User::class,
Post::class,
]);
}
候补
这个gist还有一个方法,这个好像也不错,但是官方文档还没有提到
资源
<?php
namespace App\Nova;
class User extends Resource
{
/**
* The model the resource corresponds to.
*
* @var string
*/
public static $model = 'App\User';
/**
* Custom priority level of the resource.
*
* @var int
*/
public static $priority = 1;
// ...
}
在 NovaServiceProvider 中
<?php
namespace App\Providers;
use Laravel\Nova\Nova;
use Laravel\Nova\Cards\Help;
use Illuminate\Support\Facades\Gate;
use Laravel\Nova\NovaApplicationServiceProvider;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Nova::sortResourcesBy(function ($resource) {
return $resource::$priority ?? 99999;
});
}
}
您可以通过这种方式设置资源的优先级,并根据优先级渲染资源。
将 /nova/resources/navigation.blade.php {{ $group }}
更改为以下内容:
{!! $group !!}
现在您可以轻松地按如下方式对组进行排序:
public static $group = '<span class="hidden">20</span>Music';
或
public static $group = '<span class="hidden">30</span>User';
注意:标题中的特殊字符一定要转换!
有了链接,有点不一样....
第一种方法:又脏又丑
你可以改变
{{ $resource::label() }}
到
{{ substr($resource::label(), 1) }}
然后您可以按资源名称的第一个字母对链接进行排序。
- 一个用户
- 专辑
- 联系
或者更好的链接方法
板条箱 app/Nova/CustomResource.php:
<?php
namespace App\Nova;
use Illuminate\Support\Str;
abstract class CustomResource extends Resource
{
public static $label = '';
/**
* @return string
*/
public static function label()
{
if(static::$label) {
return static::$label;
}
return Str::plural(Str::title(Str::snake(class_basename(get_called_class()), ' ')));
}
}
改变/nova/resources/navigation.blade.php
{!! $resource::label() !!}
并且在 Nova 资源中,扩展这个自定义资源并且您可以使用 public static $label:
class Lyric extends CustomResource
{
public static $label = '<span class="hidden">10</span>Lyrics';
public static function singularLabel()
{
return __('Lyric');
}
注意:标题中的特殊字符一定要转换!
一种更简洁的方法并在最新的 Nova 3.x 上进行了测试。此外,自 2.10+ 版本以来,它已被添加到 Nova 中。您需要做的就是在您的 nova 类 上添加一个静态 属性。例如,客户将是:
/**
* The side nav menu order.
*
* @var int
*/
public static $priority = 2;
然后您可以使用 NovaServiceProvider 告诉 nova 使用您的自定义排序。您可以将代码放在 boot method
public function boot()
{
Nova::sortResourcesBy(function ($resource) {
return $resource::$priority ?? 9999;
});
}
对组进行排序:
将此添加到您的资源中:
public static function groupOrder() {
return 9999999;
}
您可以通过将它添加到任何成员资源来覆盖它,以降低它在导航树中的顺序:
public static function groupOrder() {
return 5;
}
在 resourcemanager 末尾返回之前添加这个(我希望我不必在这个地方覆盖它):
$arrSort = [];
foreach ($navigation as $group => $resources) {
$resourcesGruoupOrders = [];
foreach ($resources as $aResource) {
$resourcesGruoupOrders[] = $aResource::groupOrder();
}
$arrSort[] = min($resourcesGruoupOrders);
}
$navigation = json_decode(json_encode($navigation), true);
array_multisort($navigation, SORT_ASC, SORT_NUMERIC, $arrSort);
有两种方法可以实现:
- 通过为资源设置优先级
- 在 NovaServiceProvider 中订购资源模型
1.优先方法
- 在资源模型中按照以下代码添加优先级:
public static $priority = 2;
- 然后像这样更新 NovaServiceProvider:
public function boot()
{
Nova::sortResourcesBy(function ($resource) {
return $resource::$priority ?? 9999;
});
}
2。在 NovaServiceProvider
中订购资源模型
在 NovaServiceProvider 中,像这样订购资源模型:
protected function resources()
{
Nova::resources([
User::class,
Post::class,
]);
}
默认情况下,左侧菜单项的顺序是按字母顺序排列的。
我的客户想手动订购这些菜单。知道如何让它成为可能吗?
转到
如果有帮助,您可以使用分组。我知道这不是 100% 的修复,但也许会有所帮助。
public static $group = 'Admin';
你可以在
App\Providers\NovaServiceProvider.php
添加方法 resources() 并手动注册资源,如
protected function resources()
{
Nova::resources([
User::class,
Post::class,
]);
}
候补
这个gist还有一个方法,这个好像也不错,但是官方文档还没有提到
资源
<?php
namespace App\Nova;
class User extends Resource
{
/**
* The model the resource corresponds to.
*
* @var string
*/
public static $model = 'App\User';
/**
* Custom priority level of the resource.
*
* @var int
*/
public static $priority = 1;
// ...
}
在 NovaServiceProvider 中
<?php
namespace App\Providers;
use Laravel\Nova\Nova;
use Laravel\Nova\Cards\Help;
use Illuminate\Support\Facades\Gate;
use Laravel\Nova\NovaApplicationServiceProvider;
class NovaServiceProvider extends NovaApplicationServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
Nova::sortResourcesBy(function ($resource) {
return $resource::$priority ?? 99999;
});
}
}
您可以通过这种方式设置资源的优先级,并根据优先级渲染资源。
将 /nova/resources/navigation.blade.php {{ $group }}
更改为以下内容:
{!! $group !!}
现在您可以轻松地按如下方式对组进行排序:
public static $group = '<span class="hidden">20</span>Music';
或
public static $group = '<span class="hidden">30</span>User';
注意:标题中的特殊字符一定要转换!
有了链接,有点不一样.... 第一种方法:又脏又丑
你可以改变
{{ $resource::label() }}
到
{{ substr($resource::label(), 1) }}
然后您可以按资源名称的第一个字母对链接进行排序。
- 一个用户
- 专辑
- 联系
或者更好的链接方法 板条箱 app/Nova/CustomResource.php:
<?php
namespace App\Nova;
use Illuminate\Support\Str;
abstract class CustomResource extends Resource
{
public static $label = '';
/**
* @return string
*/
public static function label()
{
if(static::$label) {
return static::$label;
}
return Str::plural(Str::title(Str::snake(class_basename(get_called_class()), ' ')));
}
}
改变/nova/resources/navigation.blade.php
{!! $resource::label() !!}
并且在 Nova 资源中,扩展这个自定义资源并且您可以使用 public static $label:
class Lyric extends CustomResource
{
public static $label = '<span class="hidden">10</span>Lyrics';
public static function singularLabel()
{
return __('Lyric');
}
注意:标题中的特殊字符一定要转换!
一种更简洁的方法并在最新的 Nova 3.x 上进行了测试。此外,自 2.10+ 版本以来,它已被添加到 Nova 中。您需要做的就是在您的 nova 类 上添加一个静态 属性。例如,客户将是:
/**
* The side nav menu order.
*
* @var int
*/
public static $priority = 2;
然后您可以使用 NovaServiceProvider 告诉 nova 使用您的自定义排序。您可以将代码放在 boot method
public function boot()
{
Nova::sortResourcesBy(function ($resource) {
return $resource::$priority ?? 9999;
});
}
对组进行排序:
将此添加到您的资源中:
public static function groupOrder() {
return 9999999;
}
您可以通过将它添加到任何成员资源来覆盖它,以降低它在导航树中的顺序:
public static function groupOrder() {
return 5;
}
在 resourcemanager 末尾返回之前添加这个(我希望我不必在这个地方覆盖它):
$arrSort = [];
foreach ($navigation as $group => $resources) {
$resourcesGruoupOrders = [];
foreach ($resources as $aResource) {
$resourcesGruoupOrders[] = $aResource::groupOrder();
}
$arrSort[] = min($resourcesGruoupOrders);
}
$navigation = json_decode(json_encode($navigation), true);
array_multisort($navigation, SORT_ASC, SORT_NUMERIC, $arrSort);
有两种方法可以实现:
- 通过为资源设置优先级
- 在 NovaServiceProvider 中订购资源模型
1.优先方法
- 在资源模型中按照以下代码添加优先级:
public static $priority = 2;
- 然后像这样更新 NovaServiceProvider:
public function boot() { Nova::sortResourcesBy(function ($resource) { return $resource::$priority ?? 9999; }); }
2。在 NovaServiceProvider
中订购资源模型在 NovaServiceProvider 中,像这样订购资源模型:
protected function resources()
{
Nova::resources([
User::class,
Post::class,
]);
}