- Основы
- Иконка
- Активный элемент
- Условие отображения
- Псевдоним
- Выпадающий список
- События
- Модификатор кнопки
Основы
Иногда возникает необходимость создать фильтры (выборку результатов) и отобразить их на листинге. Для таких ситуаций были созданы теги.
namespace App\MoonShine\Resources\Post\Pages;use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;use MoonShine\Laravel\Pages\Crud\IndexPage;class PostIndexPage extends IndexPage{// ...protected function queryTags(): array{return [QueryTag::make('Post with author', // Заголовок тегаfn(Builder $query) => $query->whereNotNull('author_id') // Query builder)];}}
namespace App\MoonShine\Resources\Post\Pages;use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;use MoonShine\Laravel\Pages\Crud\IndexPage;class PostIndexPage extends IndexPage{// ...protected function queryTags(): array{return [QueryTag::make('Post with author', // Заголовок тегаfn(Builder $query) => $query->whereNotNull('author_id') // Query builder)];}}

Метод queryTags() также доступен в классе ModelResource для обратной совместимости, но рекомендуется определять теги непосредственно в IndexPage.
Иконка
Вы можете добавить иконку к тегу с помощью метода icon().
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('Post without an author',fn(Builder $query) => $query->whereNull('author_id'))->icon('users')
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('Post without an author',fn(Builder $query) => $query->whereNull('author_id'))->icon('users')
Для более подробной информации, пожалуйста, обратитесь к разделу Иконки.
Активный элемент
Вы можете сделать QueryTag активным по умолчанию. Для этого нужно использовать метод default().
default(Closure|bool|null $condition = null)default(Closure|bool|null $condition = null)
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('All posts',fn(Builder $query) => $query)->default()
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('All posts',fn(Builder $query) => $query)->default()
Условие отображения
Вы можете захотеть отображать теги только при определенных условиях.
Для этого можно использовать метод canSee(), которому нужно передать функцию обратного вызова, возвращающую TRUE или FALSE.
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('Post with author', // Заголовок тегаfn(Builder $query) => $query->whereNotNull('author_id'))->canSee(fn() => auth()->user()->moonshine_user_role_id === 1)
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('Post with author', // Заголовок тегаfn(Builder $query) => $query->whereNotNull('author_id'))->canSee(fn() => auth()->user()->moonshine_user_role_id === 1)
Псевдоним
По умолчанию значение для URL генерируется автоматически из параметра label.
При этом все символы не латинского алфавита заменяются соответствующей транслитерацией 'Заголовок' => 'zagolovok'.
Метод alias() позволяет задать собственное значение для URL.
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('Archived Posts',fn(Builder $query) => $query->where('is_archived', true))->alias('archive')
use Illuminate\Database\Eloquent\Builder;use MoonShine\Laravel\QueryTags\QueryTag;QueryTag::make('Archived Posts',fn(Builder $query) => $query->where('is_archived', true))->alias('archive')
Выпадающий список
По умолчанию все кнопки-теги выводятся в строку, но вы можете вывести их через выпадающий список.
Для этого в ресурсе измените свойство $queryTagsInDropdown.
class PostResource extends ModelResource{protected bool $queryTagsInDropdown = true;// ...}class PostResource extends ModelResource{protected bool $queryTagsInDropdown = true;// ...}
События
Вызов собственных событий после успешного обновления данных:
QueryTag::make('QueryTag', fn($q) => $q)->events([AlpineJs::event(JsEvent::FRAGMENT_UPDATED, 'custom-fragment')])QueryTag::make('QueryTag', fn($q) => $q)->events([AlpineJs::event(JsEvent::FRAGMENT_UPDATED, 'custom-fragment')])
Модификатор кнопки
QueryTag::make('QueryTag', fn($q) => $q)->modifyButton(fn(ActionButton $btn) => $btn)QueryTag::make('QueryTag', fn($q) => $q)->modifyButton(fn(ActionButton $btn) => $btn)