Версія v1.6.5 Попередні версії: документація на GitHub
Блоки полів
На цій сторінці
На формах створення й редагування та на сторінці перегляду поля можна згрупувати в панелі з заголовком і вкладки. Блоки впливають лише на вигляд: валідація, збереження, список (index) і порядок колонок працюють так само, як без них.
use Maxcxam\Larsadmin\Layout\Panel;
use Maxcxam\Larsadmin\Layout\Tabs;
public function fields(Request $request): array
{
return [
ID::make()->sortable(),
Text::make('Заголовок', 'title')->rules('required', 'max:255'),
Panel::make('Публікація', [
Select::make('Статус', 'status')->options(['draft' => 'Чернетка', 'live' => 'Опубліковано']),
DateTime::make('Дата публікації', 'published_at')->nullable(),
Textarea::make('Анонс', 'excerpt')->nullable()->fullWidth(),
])->columns(2)->description('Коли й як допис з\'явиться на сайті.'),
Tabs::make('Додатково', [
Panel::make('SEO', [
Text::make('Meta title', 'meta_title')->nullable(),
Textarea::make('Meta description', 'meta_description')->nullable(),
]),
Panel::make('Статистика', [
Number::make('Перегляди', 'views')->exceptOnForms(),
]),
]),
Panel::make('Службове', [
Textarea::make('Внутрішня примітка', 'internal_note')->nullable(),
])->collapsed(),
BelongsToMany::make('Теги', 'tags', Tag::class),
];
}
fields() повертає суміш полів, Panel і Tabs у потрібному порядку.
Panel
Panel::make(string $name, array $fields) приймає назву й список полів.
| Метод | За замовчуванням | Опис |
|---|---|---|
description(string) |
текст під заголовком панелі | |
columns(int) |
1 |
1 або 2 колонки. Інше значення кидає InvalidArgumentException |
collapsible(bool $collapsible = true) |
false |
панель можна згорнути кнопкою в заголовку; спочатку розгорнута |
collapsed(bool $collapsed = true) |
false |
панель спочатку згорнута; вмикає й collapsible() |
Кнопкою згортання служить заголовок, тому collapsible() і collapsed() на панелі з порожньою назвою
кидають InvalidArgumentException.
Стан згортання живе лише на відкритій сторінці й не зберігається між переходами.
Дві колонки й fullWidth()
У панелі з columns(2) поля розташовуються сіткою у дві колонки, а підпис стоїть над полем.
На вузьких екранах сітка складається в одну колонку.
Field::fullWidth(bool $full = true) розтягує поле на обидві колонки: зручно для Textarea та
довгих текстів. В одноколонковій панелі fullWidth() нічого не змінює.
fullWidth()іwidth()різні речі:width()задає ширину колонки списку (Поля),fullWidth()стосується лише форм і сторінки перегляду.
Tabs
Tabs::make(?string $name, array $panels) створює набір вкладок: кожна панель стає вкладкою,
назва панелі стає підписом вкладки.
- Потрібна щонайменше одна панель, інакше
InvalidArgumentException. Будь-що, крімPanel, кидаєLogicException. $nameне показується як заголовок; це доступна назва набору вкладок для екранних читачів (aria-label). Можна передатиnull.description()іcolumns()панелі діють і всередині вкладки.collapsible()/collapsed()у вкладці ігноруються.- Вкладки керуються з клавіатури: стрілки ←/→,
Home,End.
Поля поза блоками
Поля, що стоять у fields() поза Panel і Tabs, групуються в панель без заголовка в тому місці,
де вони стоять. Тому сутність без блоків виглядає так само, як раніше.
Обмеження
fields() перевіряється під час побудови полів. Помилки кидають LogicException:
| Ситуація | Чому |
|---|---|
HasMany або BelongsToMany усередині Panel |
панелі зв'язків рендеряться окремо. Залиште їх поза блоками, вони показуються після блоків на сторінці перегляду |
| панель у панелі, вкладки в панелі | вкладення блоків не підтримується |
| один атрибут двічі (у тому числі в різних блоках) | атрибут має бути унікальним у межах fields() |
елемент, що не є Field, Panel чи Tabs |
BelongsTo можна класти в панель: це звичайне поле форми.
Видимість
Блоки враховують видимість полів (hideFromDetail, onlyOnForms, canSee, умовні замикання тощо,
див. Поля) окремо для кожної сторінки й кожного запису. Панель або вкладка,
у якій не лишилося жодного видимого поля, не показується. Набір вкладок без жодної вкладки теж
зникає.
На список (index) блоки не впливають: колонки таблиці беруться з полів у порядку їх оголошення.
Поля панелі чи вкладки стоять серед колонок там, де оголошено сам блок, тож щоб колонка була
раніше, оголосіть поле чи блок вище в fields().
Помилки валідації
Після невдалого збереження форма показує, де помилки, навіть якщо поле сховане:
- згорнута панель з помилкою розгортається;
- у наборі вкладок відкривається перша вкладка з помилкою;
- підпис вкладки (і заголовок панелі, яку можна згорнути) показує кількість помилок у ній.
Для екранних читачів лічильник має текст на зразок «2 помилки».
Як це передається у фронтенд
Довідково, для тих, хто читає відповіді Inertia: блоки не змінюють масив полів. Поруч передається
окреме дерево layout з атрибутами полів (record.layout на сторінках перегляду й редагування,
проп layout на сторінці створення). Рядки списку layout не мають.
Далі: Метрики.