По умолчанию элементы левого меню расположены в алфавитном порядке.
Мой клиент хочет заказать эти меню вручную. Есть идеи, как это сделать?
Перейти к отвечать
@SauminiNavaratnam Вопрос отличается от проблемы, которую вы задали в своем комментарии, вопрос связан с порядком пунктов меню, которые отображаются на левой панели навигации. Упомянутая вами проблема GitHub связана с упорядочиванием записей для каждого ресурса.






вы можете использовать группировку, если это помогает. Я знаю, что это не 100% исправление, но, возможно, это немного поможет.
public static $group = 'Admin';
Вы можете сделать это в
App\Providers\NovaServiceProvider.php
добавьте метод resources () и зарегистрируйте ресурсы вручную, например
protected function resources()
{
Nova::resources([
User::class,
Post::class,
]);
}
Альтернативный
В этом суть упоминается еще один способ, он тоже кажется хорошим, но в официальной документации о нем еще нет.
Ресурс
<?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;
});
}
}
Таким образом вы устанавливаете приоритет ресурса и в зависимости от приоритета визуализируете ресурс.
Мне пришлось добавить \ App \ Nova \ перед именем класса. Но это сработало Спасибо
@dmgd, если вы не импортируете ресурс вверху, вам нужно использовать `\ App \ Nova` перед ресурсом.
Этот метод работает, но если у вас также есть группировка, порядок сортировки группы возвращается к тому, что имя группы имя.
Если вы используете ресурс, который нет отображается на панели навигации, но он используется в ресурсах, отображаемых на панели навигации, вы должны добавить их в массив ресурсов. иначе nova покажет страницу 404
Не знаю почему, но у меня не сработало в Nova 3.x. Любые идеи?
@MustafaEhsanAlokozay, не глядя на ваш код или ошибку, которую вы получаете.
@MustafaEhsanAlokozay Я обновил альтернативу, пожалуйста, если это сработает для вас, но исходное решение - это то, что они предложили в документации.
@PrafullaKumarSahu главное решение (Nova::sortResourceBy()) сработало для меня, спасибо!
Измените /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) }}
Затем вы можете отсортировать ссылки по первой букве названия ресурса.
Или лучший метод для ссылок ящик приложения / 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 расширяет этот настраиваемый ресурс, и вы можете использовать общедоступную статическую метку $:
class Lyric extends CustomResource
{
public static $label = '<span class = "hidden">10</span>Lyrics';
public static function singularLabel()
{
return __('Lyric');
}
Внимание: в заголовке необходимо преобразовывать спецсимволы!
Более чистый способ и протестирован на последней версии Nova 3.x. Кроме того, это было добавлено в Nova, начиная с версии 2.10+. Все, что вам нужно сделать, это добавить статическое свойство в ваши классы 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
для сортировки групп:
добавьте это в свои ресурсы:
public static function groupOrder() {
return 9999999;
}
вы можете перезаписать его, добавив его к любому членскому ресурсу, чтобы понизить его порядок в дереве навигации:
public static function groupOrder() {
return 5;
}
добавьте это перед тем, как вернуться в конец менеджера ресурсов (надеюсь, мне не придется перезаписывать это здесь):
$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);
где находится файл менеджера ресурсов, который я должен поместить в этот фрагмент кода?
Этого можно добиться двумя способами:
1. Приоритетный метод
public static $priority = 2;
public function boot()
{
Nova::sortResourcesBy(function ($resource) {
return $resource::$priority ?? 9999;
});
}
2. Заказ моделей ресурсов в NovaServiceProvider
В NovaServiceProvider упорядочивайте модели ресурсов следующим образом:
protected function resources()
{
Nova::resources([
User::class,
Post::class,
]);
}
Я использую вспомогательный метод __() вместе с методами label() и singularLabel() для перевода названия моих ресурсов Nova. Кажется, что второе решение не работает в этом сценарии, так как мои ресурсы отсортированы по алфавиту, а не в порядке, который я передал в Nova::resources().
В соответствии с v1.1.7 это невозможно. В будущем это может быть возможно. github.com/laravel/nova-issues/issues/461