Структура базы данных
Пять таблиц с префиксом MODX (modx_prism_* при стандартном префиксе). Всё описанное здесь
лежит и в самой установке — core/components/prism/schema/prism.mysql.schema.xml, по этому файлу
сделаны классы модели. Если что-то расходится, смотрите в него.
В таблицах только записи о медиа. Сами файлы остаются в Media Source MODX — обычными файлами
сайта. Удаление записи удаляет и файл, если включена настройка prism.cleanup_on_delete.
prism_item
Класс модели Prism\Model\Item. Все медиа одной таблицей. Тип отличает изображение от видео, файла и embed; лишние для типа колонки остаются пустыми. Поэтому prismMixed выбирает всё сразу одним запросом, а не объединяет четыре почти одинаковые таблицы.
| Поле | Тип | По умолчанию | Назначение |
|---|---|---|---|
id | int unsigned | AUTO_INCREMENT | Первичный ключ. |
type | enum('image','video','file','embed') | image | Тип элемента. Одна таблица на все типы — изображения, видео, файлы и embed отличаются только этим полем и набором заполненных колонок. |
resource_id | int(10) unsigned | 0 | Ресурс MODX, к которому прикреплён элемент. |
parent | int(10) unsigned | 0 | Родительский элемент. Используется постером видео: постер — обычный элемент, ссылающийся на своё видео. |
source_id | int(10) unsigned | 0 | Media Source, в котором лежит файл. |
path | varchar(255) | — | Папка внутри источника, например prism/12/. Заканчивается слэшем. |
file | varchar(255) | — | Имя файла. У внешнего видео и embed пустое. |
url | text | NULL | Внешний адрес: страница видео у провайдера. У изображений и файлов пустой — адрес собирается из источника, пути и имени. |
provider | varchar(32) | — | youtube, vimeo, dailymotion, rutube, local — для видео. |
provider_id | varchar(128) | — | Идентификатор ролика у провайдера. |
embed_code | text | NULL | Готовый санитизированный iframe для embed и внешнего видео. |
name | varchar(255) | — | Имя, показываемое в панели. По умолчанию — исходное имя файла. |
title | varchar(255) | — | Заголовок для вывода на сайте. |
alt | varchar(255) | — | Альтернативный текст изображения. |
description | text | NULL | Описание. |
hash | char(40) | — | SHA-1 содержимого файла. По нему работает дедупликация при загрузке. |
mime | varchar(64) | — | MIME-тип, определённый по содержимому, а не по расширению. |
size | int(10) unsigned | 0 | Размер файла в байтах. |
width | int(10) unsigned | 0 | Ширина оригинала в пикселях. |
height | int(10) unsigned | 0 | Высота оригинала в пикселях. |
duration | int(10) unsigned | 0 | Длительность видео в секундах. |
focal_x | decimal(5,4) | 0.5000 | Точка фокуса по горизонтали, 0..1. Вокруг неё кадрируют пресеты с position: focal. |
focal_y | decimal(5,4) | 0.5000 | Точка фокуса по вертикали, 0..1. |
properties | json | NULL | Служебные данные: доминантный цвет, blurhash, EXIF, адрес плеера, счётчик скачиваний, кадр crop = [x, y, w, h] долями оригинала. |
extra | json | NULL | Значения пользовательских полей: ключ поля → значение. По ним можно сортировать и фильтровать (extra.имя). |
rank | int(10) unsigned | 0 | Порядок в панели и в выводе по умолчанию. |
active | tinyint(1) unsigned | 1 | Показывать на сайте. Неактивные видны только с &showInactive=1. |
featured | tinyint(1) unsigned | 0 | Особый элемент: поднимается вперёд при &featuredFirst=1, берётся обложкой в prismThumbnail. |
createdby | int(10) unsigned | 0 | Автор. |
createdon | datetime | NULL | Когда создан. |
editedby | int(10) unsigned | 0 | Кто правил последним. |
editedon | datetime | NULL | Когда правили. |
Индексы
| Имя | Колонки | Уникальный |
|---|---|---|
type | type | нет |
resource_id | resource_id | нет |
parent | parent | нет |
hash | hash | нет |
rank | rank | нет |
source_path_file | source_id, path(191), file(191), type | нет |
Связи
| Алиас | Класс | Вид |
|---|---|---|
ItemTags | Prism\Model\ItemTag | композит, удаляется каскадом, id → item_id |
Resource | MODX\Revolution\modResource | агрегат, resource_id → id |
Source | MODX\Revolution\Sources\modMediaSource | агрегат, source_id → id |
CreatedBy | MODX\Revolution\modUser | агрегат, createdby → id |
EditedBy | MODX\Revolution\modUser | агрегат, editedby → id |
prism_tag
Класс модели Prism\Model\Tag. Теги общие для всего сайта, а не для отдельного ресурса.
| Поле | Тип | По умолчанию | Назначение |
|---|---|---|---|
id | int unsigned | AUTO_INCREMENT | Первичный ключ. |
name | varchar(100) | — | Отображаемое имя тега. |
alias | varchar(100) | — | Латинский алиас, по нему фильтруют в &tags. Уникален. |
color | varchar(7) | — | Цвет метки в панели, #rrggbb. |
rank | int(10) unsigned | 0 | Порядок в списке тегов. |
Индексы
| Имя | Колонки | Уникальный |
|---|---|---|
alias | alias | да |
rank | rank | нет |
Связи
| Алиас | Класс | Вид |
|---|---|---|
ItemTags | Prism\Model\ItemTag | композит, удаляется каскадом, id → tag_id |
prism_item_tag
Класс модели Prism\Model\ItemTag. Связь многие-ко-многим между элементами и тегами.
| Поле | Тип | По умолчанию | Назначение |
|---|---|---|---|
id | int unsigned | AUTO_INCREMENT | Первичный ключ. |
item_id | int(10) unsigned | 0 | Элемент. |
tag_id | int(10) unsigned | 0 | Тег. |
Индексы
| Имя | Колонки | Уникальный |
|---|---|---|
item_tag | item_id, tag_id | да |
tag_id | tag_id | нет |
Связи
| Алиас | Класс | Вид |
|---|---|---|
Item | Prism\Model\Item | агрегат, item_id → id |
Tag | Prism\Model\Tag | агрегат, tag_id → id |
prism_preset
Класс модели Prism\Model\Preset. Пресеты превью. Правятся на странице настроек, а не в конфиге.
| Поле | Тип | По умолчанию | Назначение |
|---|---|---|---|
id | int unsigned | AUTO_INCREMENT | Первичный ключ. |
name | varchar(50) | — | Имя пресета, оно же попадает в адрес превью. |
width | int(10) unsigned | 0 | Ширина рамки, 0 — не ограничивать. |
height | int(10) unsigned | 0 | Высота рамки, 0 — не ограничивать. |
fit | enum('contain','crop','fill') | contain | contain — вписать без обрезки, crop — заполнить рамку с обрезкой, fill — заполнить с полями. |
position | varchar(20) | focal | focal — кадрировать вокруг точки фокуса элемента, либо сторона или угол. |
format | enum('auto','webp','avif','jpg','png') | auto | auto даёт picture с avif и webp; либо конкретный формат. |
quality | tinyint(3) unsigned | 82 | Качество для jpg, webp, avif. |
dpr | json | NULL | Плотности, для которых готовится srcset, например [1, 2]. |
options | json | NULL | Водяной знак и фильтры этого пресета поверх общих настроек. Только параметры эффектов. |
rank | int(10) unsigned | 0 | Порядок в списке пресетов. |
Индексы
| Имя | Колонки | Уникальный |
|---|---|---|
name | name | да |
prism_field
Класс модели Prism\Model\Field. Определения пользовательских полей. Значения лежат в Item.extra, отдельной таблицы значений нет.
| Поле | Тип | По умолчанию | Назначение |
|---|---|---|---|
id | int unsigned | AUTO_INCREMENT | Первичный ключ. |
name | varchar(50) | — | Ключ поля, латиницей. В чанках доступно как [[+extra.ключ]]. |
caption | varchar(255) | — | Подпись в диалоге элемента. |
type | enum('text','textarea','number','date','bool','select') | text | Тип значения; по нему значение проверяется при сохранении и приводится при сортировке. |
options | json | NULL | Варианты для типа select. |
applies_to | varchar(64) | image,video,file,embed | Типы элементов, к которым применяется поле, через запятую. |
rank | int(10) unsigned | 0 | Порядок полей в диалоге. |
Индексы
| Имя | Колонки | Уникальный |
|---|---|---|
name | name | да |