Галерея (PRO)
Много файлов в одном поле, порядок задаётся перетаскиванием. У каждого своя подпись и описание, и редактируется каждый отдельно.
Настройки: источник и путь, как у файла, и стратегия имени, как у картинки. Больше ничего не нужно: загруженные картинки проходят ту же автоматическую конвертацию, что и у поля изображения.
«Миниатюры» и «Группы» — остатки, в 3.0 они ничего не делают
В настройках поля всё ещё есть поле Миниатюры с примером JSON в подсказке и сворачиваемый блок Группы. Ни то, ни другое ни к чему не подключено: JSON сохраняется и никогда не читается, блок пустой, а выбор группы у файла отключён — так что groups всегда приходит пустым. Миниатюры для грида в менеджере Glide делает на лету, всегда 100×80 WebP; для страницы размеры задавайте своим шаблоном.
Удаление файла
Это два отдельных действия в строке, и разница между ними важна:
| Действие | Что делает |
|---|---|
| Убрать из списка | Удаляет только строку — файл остаётся в медиа-источнике |
| Удалить файл | Удаляет строку и сам файл с диска |
Оба работают и на выделении, не только на одной строке. Системной настройки за этим нет — выбор делается на каждое удаление.
Вывод — массив; у каждого элемента те же ключи, что у файла, плюс type, preview и groups:
<div class="gallery">
{foreach $images as $image}
{if $image.type === 'image'}
<img src="/{$image.url}" alt="{$image.title ?: $image.name}">
{/if}
{/foreach}
</div>В галерее лежат любые файлы, не только картинки
Видео, PDF и фотография прекрасно уживаются рядом; различает их type, а видео можно задать собственную обложку в поле Превью. Ради этого и стоит ветвиться по type в цикле.
Файлы живут в своей таблице, и из этого следует
Они хранятся отдельно от записи, а не внутри её значения. Поэтому «обязательное» для этого типа скрыто — проверять на самой записи нечего, — и галерея пропускается при сохранении значений секций ресурса и пользователя.