- Основы
- Элементы и поля
- Приведение типов
- Заголовок
- Содержимое
- Название
- Подзаголовок
- Миниатюра
- Кнопки
- Режим наложения
- Пагинатор
- Асинхронный режим
- Атрибуты
- Колонки
- Пользовательский компонент
Расширяет MoonShineComponent
- имеет те же функции
Основы
С помощью CardsBuilder вы можете отображать список элементов в виде карточек.
Вы также можете использовать CardsBuilder на своих собственных страницах или даже за пределами MoonShine.
CardsBuilder::make(Fields|array $fields = [],protected iterable $items = [])
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::make([['id' => 1, 'title' => 'Заголовок 1'],['id' => 2, 'title' => 'Заголовок 2'],],[ID::make(),Text::make('title')])
Элементы и поля для CardsBuilder можно указать с помощью соответствующих методов.
Элементы и поля
Метод items()
позволяет передать CardsBuilder данные для заполнения карточек.
items(iterable $items = [])
items(iterable $items = [])
Метод fields()
позволяет передать CardsBuilder список полей для построения карточки.
fields(Fields|Closure|array $fields)
fields(Fields|Closure|array $fields)
CardsBuilder::make()->fields([Text::make('Text')])->items([['text' => 'Значение']])
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))
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)
header(Closure|string $value)
$value
- column или замыкание, возвращающее html код.
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])->header(static fn() => Badge::make('new', 'success'))
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])->header(static fn() => Badge::make('new', 'success'))
Содержимое
Методы content()
используются для добавления произвольного содержимого в карточку.
content(Closure|string $value)
content(Closure|string $value)
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->content('Пользовательское содержимое')
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->content('Пользовательское содержимое')
Название
Метод title()
позволяет установить название карточки.
title(Closure|string $value)
title(Closure|string $value)
$value
- column или замыкание, возвращающее название.
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->title('title')
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->title('title')
Ссылка
С помощью метода url()
можно установить ссылку на заголовок.
url(Closure|string $value)
url(Closure|string $value)
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->title('title')->url(fn($data) => (new ArticleResource())->formPageUrl($data))
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->title('title')->url(fn($data) => (new ArticleResource())->formPageUrl($data))
Подзаголовок
Метод subtitle()
позволяет установить подзаголовок карточки.
subtitle(Closure|string $value)
subtitle(Closure|string $value)
$value
- column или замыкание, возвращающее подзаголовок.
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])->title('title')->subtitle(static fn() => 'Подзаголовок')
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])->title('title')->subtitle(static fn() => 'Подзаголовок')
Миниатюра
Чтобы добавить изображение в карточку, можно использовать метод thumbnail()
.
В качестве аргумента методы принимают значение поля колонки или замыкание, возвращающее url изображения.
thumbnail(Closure|string $value)
thumbnail(Closure|string $value)
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])->thumbnail('thumbnail')
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)])
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()
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)
$paginator = Article::paginate();CardsBuilder::make()->fields([Text::make('Text')])->items($paginator->items())->paginator($paginator)
Или напрямую передать пагинатор:
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])
CardsBuilder::make(items: Article::paginate())->fields([Text::make('Text')])
Асинхронный режим
Если вам нужно получать данные асинхронно (например, при пагинации), то используйте метод async()
.
async(?string $asyncUrl = null,string|array|null $asyncEvents = null,?string $asyncCallback = null)
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()
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'])
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'])
CardsBuilder::make()->items(Article::paginate())->fields([ID::make(), Switcher::make('Active')])->customAttributes(['class' => 'custom-cards'])
Колонки
Метод columnSpan()
позволяет задать ширину карточек в Grid.
columnSpan(int $columnSpan,int $adaptiveColumnSpan = 12)
columnSpan(int $columnSpan,int $adaptiveColumnSpan = 12)
$columnSpan
- значение для десктопной версии,$adaptiveColumnSpan
- значение для мобильной версии.
CardsBuilder::make(fields: [Text::make('Text')],items: Article::paginate())->columnSpan(3)
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');})
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');})