Ресурсы вне дерева
Страница, которая ведёт себя как ресурс MODX — свой адрес, шаблон, флаги меню, публикация, блоки, — но живёт в pb_resources, а не в site_content, и поэтому в дереве ресурсов не появляется никогда.
Почему не сделать обычный ресурс
Дерево MODX — инструмент менеджера. Оно годится для страниц, по которым человек ходит: разделы, статьи, лендинги. И перестаёт годиться, когда страницы — это данные.
Десять тысяч городов, каждая компания справочника, каждая вакансия: ресурсами они превращают дерево в то, что невозможно открыть, замедляют менеджер и хоронят те две дюжины страниц, которые редактор действительно правит.
При этом им по-прежнему нужно всё, что есть у ресурса: адрес, шаблон, заголовок, мета, публикация. pb_resources даёт ровно это, в отдельной таблице.
Что умеет
Колонки повторяют знакомые:
| Содержимое | pagetitle, longtitle, description, introtext, content, menutitle |
| Адрес | alias, uri, uri_override, alias_visible |
| Поведение | template, menuindex, hidemenu, isfolder, searchable, context_key |
| Жизненный цикл | published_at, deleted_at, временные метки |
Плюс пара конструктора — model_type и model_id для владельца, constructor_id, field_id и data. А значит, свой ресурс — это AbstractDataModel: поля конструктора на нём работают ровно так же, как на блоке.
У него есть и blocks(), поэтому такая страница собирается в конструкторе, как любая другая.
Как разрешается адрес
ResourceResolver смотрит в три места по порядку:
- перевод — поэтому
/de/uber-unsи есть канонический немецкий адрес; site_content— обычный ресурс MODX;pb_resources.
Оба вида рендерятся одними и теми же шаблонами. Шаблон не знает, из какой таблицы пришла страница, и знать ему не нужно.
При совпадении побеждает настоящий ресурс
Если адрес есть в обеих таблицах, отвечает site_content. Поэтому свою таблицу безопасно наполнять импортом: сгенерированная строка не отберёт страницу, которую сделал редактор.
URI собирается сам
uri пересчитывается при сохранении из алиаса и префикса владельца, так что вы задаёте alias и забываете.
Два переключателя это меняют:
uri_override— оставитьuriровно таким, как записано, и больше не пересчитывать. Для адреса, доставшегося от старого сайта, который менять нельзя.alias_visibleу родителя — когда выключен, алиас родителя не входит в URI ребёнка. Так уровень группировки существует в данных, но не появляется в адресе.
Что когда брать
| Брать | |
|---|---|
| Страница, которую редактор пишет и переставляет | Ресурс MODX |
| Много страниц из данных, каждой нужен свой адрес и мета | pb_resources |
| Страница с логикой и без сохранённой строки вообще | Виртуальную страницу |
Все три уживаются вместе. Раздел каталога может быть ресурсом, его тысячи позиций — своими ресурсами, а фильтр — виртуальной страницей: на одном сайте и в одних шаблонах.