label 로 정렬

Laravel nova 는 좌측의 사이드바에 자동으로 모든 Resource 를 검색해서 등록합니다.

nova resource 정렬 화면

이때 Resource 클래스의 label() 메서드에 정의된 이름 순으로 정렬하며 label 을 구현하지 않았다면 다음 기본 메서드가 실행됩니다.

/**
     * Get the displayable label of the resource.
     *
     * @return string
     */
    public static function label()
    {
        return Str::plural(Str::title(Str::snake(class_basename(get_called_class()), ' ')));
    }
PHP


그래서 label() 이 없을 경우 위와 같이 기본 class 명으로 정렬하게 됩니다.


일단 가장 간단하게 좌측 메뉴에서 정렬하려면 label() 을 구현해 주고 정렬하려는 순서에 맞게 앞에 숫자를 붙여 주면 됩니다.


즉 Posts 를 맨 앞에 표시하고 싶으면 Post Resource 에 label() 을 구현하면 됩니다.

static public function label()
{
	return '1. Posts';
}
CODE

그러면 화면처럼 정렬해서 표시됩니다.


하지만 이 방법은 리소스가 늘어나면 정렬 순서때문에 손이 많이 가고 또 앞에 붙은 숫자가 보기 싫을때도 많습니다. 그리고 맨 처음에 표시해야 하는 리소스가 있을 경우 정렬을 위해 기존에 첫 번째로 표시한 리소스의 label () 을 수정해야 할 수도 있습니다.


정렬 priority 지정

제일 깔끔한 방법은 NovaServiceProviderregister() 메서드에 다음 내용을 추가해서 Nova resource 의 $sortOrder 프로퍼티 순으로 정렬하도록 하는 방법입니다.

App\Providers\NovaServiceProvider

	public function register()
    {
        Nova::sortResourcesBy(function ($resource) {
            return $resource::$sortOrder?? 9999;
        });
    }
PHP


이제 정렬하려는 Nova Resource 클래스에 $sortOrder propery 를 정의하고 값을 설정합니다. (작을수록 먼저 표시됩니다.)

Post.php

class Post extends Resource
{
    public static $sortOrder = 1;
PHP

User.php

class User extends Resource
{
    public static $sortOrder = 3;
PHP


이제 $sortOrder 가 작을수록 앞에 보여지므로 Post 와 User 가 다른 리소스 보다 먼저 보여 지게 됩니다.


Ref