Laravel Nova-重新排序左侧导航菜单项

时间:2018-11-21 05:08:35

标签: laravel laravel-nova

默认情况下,左侧菜单项的顺序为字母顺序。

我的客户想手动订购那些菜单。知道如何使之成为可能吗?

enter image description here

6 个答案:

答案 0 :(得分:9)

更干净的方式,并在最新的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;
    });
}

**参考文献Nova Private Repo

答案 1 :(得分:2)

有两种方法可以实现此目的:

  1. 通过将资源的优先级设置为
  2. 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,
    ]);
 }

答案 2 :(得分:1)

如果有帮助,您可以使用分组。我知道这不是100%的修复程序,但也许会有所帮助。

public static $group = 'Admin';

答案 3 :(得分:1)

您可以在

中进行操作
App\Providers\NovaServiceProvider.php

添加方法resources()并手动注册资源,例如

 protected function resources()
    {
        Nova::resources([
            User::class,
            Post::class,
        ]);
    }

答案 4 :(得分:1)

将/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) }}

然后,您可以按资源名称的首字母对链接进行排序。

  • AUser
  • Balbum
  • CContact

或者更好的链接方法 板条箱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资源中,扩展此自定义资源,然后可以使用公共静态$ label:

class Lyric extends CustomResource
{
    public static $label = '<span class="hidden">10</span>Lyrics';

     public static function singularLabel()
    {
        return __('Lyric');
    }

注意:您必须在标题中转换特殊字符!

答案 5 :(得分:0)

对组进行排序:

将此添加到您的资源中:

    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);