Laravel 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 () 을 수정해야 할 수도 있습니다.
제일 깔끔한 방법은 NovaServiceProvider 의 register() 메서드에 다음 내용을 추가해서 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 가 다른 리소스 보다 먼저 보여 지게 됩니다.