# Основы
Иногда возникает потребность создать набор фильтров (подборку результатов) и отобразить ее на листинге. Для таких ситуаций созданы теги.
namespace App\MoonShine\Resources; use App\Models\Post;use Illuminate\Database\Eloquent\Builder;use MoonShine\QueryTags\QueryTag; use MoonShine\Resources\ModelResource; class PostResource extends ModelResource{ protected string $model = Post::class; protected string $title = 'Posts'; //... public function queryTags(): array { return [ QueryTag::make( 'Post with author', // Tag Title fn(Builder $query) => $query->whereNotNull('author_id') // Query builder ) ]; } //...}
![](http://moonshine-laravel.com/screenshots/query_tags.png)
# Иконка
Тега можно добавить иконку воспользовавшись методом icon()
.
use Illuminate\Database\Eloquent\Builder;use MoonShine\QueryTags\QueryTag; //... QueryTag::make( 'Post without an author', fn(Builder $query) => $query->whereNull('author_id')) ->icon('heroicons.users')
За более подробной информацией обратитесь к разделу Icons
# Активный пункт
Можно сделать активным QueryTag по умолчанию.
Для этого необходимо воспользоваться методом default()
.
default(Closure|bool|null $condition = null)
use Illuminate\Database\Eloquent\Builder;use MoonShine\QueryTags\QueryTag; //... QueryTag::make( 'All posts', fn(Builder $query) => $query) ->default()
# Условие отображения
Может потребоваться отобразить теги только при определенных условиях,
для этого можно воспользоваться методом canSee()
,
которому необходимо передать callback функцию возвращающее TRUE
или FALSE
.
use Illuminate\Database\Eloquent\Builder;use MoonShine\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\QueryTags\QueryTag; //... QueryTag::make( 'Archived posts', fn(Builder $query) => $query->where('is_archived', true)) ->alias('archive')