- Основы
- Элементы и поля
- Приведение типов
- Заголовок
- Содержимое
- Название
- Подзаголовок
- Миниатюра
- Кнопки
- Режим наложения
- Пагинатор
- Асинхронный режим
- Атрибуты
- Колонки
- Пользовательский компонент
Расширяет MoonShineComponent
- имеет те же функции
Основы
С помощью CardsBuilder вы можете отображать список элементов в виде карточек.
Вы также можете использовать CardsBuilder на своих собственных страницах или даже за пределами MoonShine.
CardsBuilder::make( Fields|array $fields = [], protected iterable $items = [])
$fields
- поля,$items
- значения полей.
CardsBuilder::make( [ ['id' => 1, 'title' => 'Заголовок 1'], ['id' => 2, 'title' => 'Заголовок 2'], ], [ ID::make(), Text::make('title') ])
Элементы и поля для CardsBuilder можно указать с помощью соответствующих методов.
Элементы и поля
Метод items()
позволяет передать CardsBuilder данные для заполнения карточек.
items(iterable $items = [])
Метод fields()
позволяет передать CardsBuilder список полей для построения карточки.
fields(Fields|Closure|array $fields)
CardsBuilder::make() ->fields([Text::make('Text')]) ->items([['text' => 'Значение']])
Соответствие данных с полями осуществляется через значение column полей!
Приведение типов
Метод cast()
используется для приведения значений таблицы к определенному типу.
Поскольку по умолчанию поля работают с примитивными типами:
use MoonShine\TypeCasts\ModelCast; CardsBuilder::make(items: User::paginate()) ->fields([Text::make('Email')]) ->cast(ModelCast::make(User::class))
В этом примере мы приводим данные к формату модели User
с помощью ModelCast
.
Для более подробной информации обратитесь к разделу TypeCasts
Заголовок
Метод header()
позволяет установить заголовок для карточек.
header(Closure|string $value)
$value
- column или замыкание, возвращающее html код.
CardsBuilder::make( items: Article::paginate()) ->fields([Text::make('Text')]) ->header(static fn() => Badge::make('new', 'success'))
Содержимое
Методы content()
используются для добавления произвольного содержимого в карточку.
content(Closure|string $value)
CardsBuilder::make( fields: [Text::make('Text')], items: Article::paginate()) ->content('Пользовательское содержимое')
Название
Метод title()
позволяет установить название карточки.
title(Closure|string $value)
$value
- column или замыкание, возвращающее название.
CardsBuilder::make( fields: [Text::make('Text')], items: Article::paginate()) ->title('title')
Ссылка
С помощью метода url()
можно установить ссылку на заголовок.
url(Closure|string $value)
CardsBuilder::make( fields: [Text::make('Text')], items: Article::paginate()) ->title('title') ->url(fn($data) => (new ArticleResource())->formPageUrl($data))
Подзаголовок
Метод subtitle()
позволяет установить подзаголовок карточки.
subtitle(Closure|string $value)
$value
- column или замыкание, возвращающее подзаголовок.
CardsBuilder::make( items: Article::paginate()) ->fields([Text::make('Text')]) ->title('title') ->subtitle(static fn() => 'Подзаголовок')
Миниатюра
Чтобы добавить изображение в карточку, можно использовать метод thumbnail()
.
В качестве аргумента методы принимают значение поля колонки или замыкание, возвращающее url изображения.
thumbnail(Closure|string $value)
CardsBuilder::make( items: Article::paginate()) ->fields([Text::make('Text')]) ->thumbnail('thumbnail')
Кнопки
Для добавления кнопок на основе ActionButton
используйте метод buttons()
.
CardsBuilder::make() ->items(Article::paginate()) ->fields([ID::make(), Switcher::make('Active')]) ->cast(ModelCast::make(Article::class)) ->buttons([ ActionButton::make('Удалить', route('name.delete')), ActionButton::make('Редактировать', route('name.edit'))->showInDropdown(), ActionButton::make('Перейти на главную', route('home'))->blank()->canSee(fn($data) => $data->active) ])
Режим наложения
Режим overlay позволяет разместить заголовок и названия поверх изображения карточки.
Этот режим активируется одноименным методом overlay()
.
CardsBuilder::make() ->items(Article::paginate()) ->fields([ID::make(), Text::make('Text')]) ->cast(ModelCast::make(Article::class)) ->thumbnail('thumbnail') ->header(static fn() => Badge::make('new', 'success')) ->title('title') ->subtitle(static fn() => 'Подзаголовок') ->overlay()
Пагинатор
Метод paginator()
для работы таблицы с пагинацией.
$paginator = Article::paginate(); CardsBuilder::make() ->fields([Text::make('Text')]) ->items($paginator->items()) ->paginator($paginator)
Или напрямую передать пагинатор:
CardsBuilder::make( items: Article::paginate()) ->fields([Text::make('Text')])
Асинхронный режим
Если вам нужно получать данные асинхронно (например, при пагинации), то используйте метод async()
.
async( ?string $asyncUrl = null, string|array|null $asyncEvents = null, ?string $asyncCallback = null)
asyncUrl
- url запроса (по умолчанию запрос отправляется на текущий url),asyncEvents
- события, вызываемые после успешного запроса,asyncCallback
- js функция обратного вызова после получения ответа.
CardsBuilder::make() ->items(Article::paginate()) ->fields([ID::make(), Switcher::make('Active')]) ->async()
После успешного запроса вы можете вызывать события, добавив параметр asyncEvents
.
CardsBuilder::make() ->items(Article::paginate()) ->fields([ID::make(), Switcher::make('Active')]) ->name('crud') ->async(asyncEvents: ['cards-updated-crud'])
MoonShine уже имеет набор готовых событий:
table-updated-{name}
- асинхронное обновление таблицы по имениcards-updated-{name}
- асинхронное обновление группы карточек по имени,form-reset-{name}
- сброс значений формы по имени,fragment-updated-{name}
- обновление blade фрагмента по имени.
Для срабатывания события необходимо указать уникальное имя компонента!
Атрибуты
Вы можете установить любые html-атрибуты для таблицы с помощью метода customAttributes()
:
CardsBuilder::make() ->items(Article::paginate()) ->fields([ID::make(), Switcher::make('Active')]) ->customAttributes(['class' => 'custom-cards'])
Колонки
Метод columnSpan()
позволяет задать ширину карточек в Grid.
columnSpan( int $columnSpan, int $adaptiveColumnSpan = 12)
$columnSpan
- значение для десктопной версии,$adaptiveColumnSpan
- значение для мобильной версии.
CardsBuilder::make( fields: [Text::make('Text')], items: Article::paginate()) ->columnSpan(3)
В админ-панели MoonShine используется 12-колоночная сетка.
Пользовательский компонент
Компонент CardsBuilder позволяет переопределить компонент для построения списка элемента.
Для этого нужно воспользоваться методом customComponent()
.
CardsBuilder::make( fields: [Text::make('Text')], items: Article::paginate()) ->customComponent(function (Article $article, int $index, CardsBuilder $builder) { return Badge::make($index + 1 . "." . $article->title, 'green'); })