Меню
Вы просматриваете документацию старой версии MoonShine. Рассмотрите возможность обновления вашего проекта до MoonShine 2.x.
# Регистрация
В разделе изучения ресурсов мы уже разобрались как регистрировать разделы админ-панели, после чего они также появляются в меню
namespace App\Providers; use Illuminate\Support\ServiceProvider;use MoonShine\Menu\MenuItem; use MoonShine\MoonShine; use MoonShine\Resources\MoonShineUserResource;use MoonShine\Resources\MoonShineUserRoleResource; class MoonShineServiceProvider extends ServiceProvider{ //... public function boot() { app(MoonShine::class)->menu([ MenuItem::make('Admins', new MoonShineUserResource()), MenuItem::make('Roles', new MoonShineUserRoleResource()), ]); }}
Но для удобства интерфейса мы также можем сгруппировать пункты меню
namespace App\Providers; use Illuminate\Support\ServiceProvider;use MoonShine\Menu\MenuItem;use MoonShine\Menu\MenuGroup; use MoonShine\MoonShine;use MoonShine\Resources\MoonShineUserResource;use MoonShine\Resources\MoonShineUserRoleResource; class MoonShineServiceProvider extends ServiceProvider{ //... public function boot() { app(MoonShine::class)->menu([ MenuGroup::make('System', [ MenuItem::make('Admins', new MoonShineUserResource()), MenuItem::make('Roles', new MoonShineUserRoleResource()), ]) ]); }}
Всего лишь необходимо добавить ресурсы вторым параметром в класс MoonShine\Menu\MenuGroup
.
Ну а первый параметр название группы!
# Условие отображения
Отображать меню по условию
//...app(MoonShine::class)->menu([ MenuGroup::make('System', [ MenuItem::make('Admins', new MoonShineUserResource()), MenuItem::make('Roles', new MoonShineUserRoleResource()), ])->canSee(function(Request $request) { return $request->user('moonshine')?->id === 1; }) ]);//...
# Внешняя ссылка
Возможность добавить кастомный линк
//...app(MoonShine::class)->menu([ MenuItem::make('Документация Laravel', 'https://laravel.com') ]);//...
Ссылки можно передавать через функцию
//...app(MoonShine::class)->menu([ MenuItem::make('Admins', function () { return (new MoonShineUserResource())->route('index'); }), MenuItem::make('Home', fn() => route('home')) ]);//...
# Иконка
Также есть возможность менять иконку у пункта меню
//...app(MoonShine::class)->menu([ MenuGroup::make('Система', [ MenuItem::make('Admins', new MoonShineUserResource())->icon('heroicons.hashtag'), MenuItem::make('Roles', new MoonShineUserRoleResource())->icon('heroicons.hashtag'), ])->icon('app') // or MenuGroup::make('Blog', [ MenuItem::make('Comments', new CommentResource(), 'heroicons.chat-bubble-left') ], 'heroicons.newspaper') ]);//...
За более подробной информацией обратитесь к разделу Icons
# Метка
Также есть возможность добавить счетчик к пункту меню
//...app(MoonShine::class)->menu([ MenuItem::make('Comments', new CommentResource()) ->badge(fn() => Comment::query()->count()), ]);//...
# Перевод
Для перевода пунктов меню необходимо в качестве названия передать ключ перевода
и добавить метод translatable()
//...app(MoonShine::class)->menu([ MenuItem::make('menu.Comments', new CommentResource()) ->translatable() // or MenuItem::make('Comments', new CommentResource()) ->translatable('menu') ]);//...
// lang/ru/menu.php return [ 'Comments' => 'Комментарии',];
Для перевода меток меню можно воспользоваться средствами перевода Laravel
//...app(MoonShine::class)->menu([ MenuItem::make('Comments', new CommentResource()) ->badge(fn() => __('menu.badge.new')) ]);//...
# Разделитель
Пункты меню можно визуально разделить с помощью MenuDivider
use MoonShine\Menu\MenuDivider; //...app(MoonShine::class)->menu([ MenuItem::make('Categories', new CategoryResource()), MenuDivider::make(), MenuItem::make('Articles', new ArticleResource()),]);//...
В качестве разделителя можно использовать текст, для этого его нужно передать методу make()
use MoonShine\Menu\MenuDivider; //...app(MoonShine::class)->menu([ MenuItem::make('Categories', new CategoryResource()), MenuDivider::make('Divider'), MenuItem::make('Articles', new ArticleResource()),]);//...