Skip to content

Ресурсы вне дерева

Страница, которая ведёт себя как ресурс 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 смотрит в три места по порядку:

  1. перевод — поэтому /de/uber-uns и есть канонический немецкий адрес;
  2. site_content — обычный ресурс MODX;
  3. pb_resources.

Оба вида рендерятся одними и теми же шаблонами. Шаблон не знает, из какой таблицы пришла страница, и знать ему не нужно.

При совпадении побеждает настоящий ресурс

Если адрес есть в обеих таблицах, отвечает site_content. Поэтому свою таблицу безопасно наполнять импортом: сгенерированная строка не отберёт страницу, которую сделал редактор.

URI собирается сам

uri пересчитывается при сохранении из алиаса и префикса владельца, так что вы задаёте alias и забываете.

Два переключателя это меняют:

  • uri_override — оставить uri ровно таким, как записано, и больше не пересчитывать. Для адреса, доставшегося от старого сайта, который менять нельзя.
  • alias_visible у родителя — когда выключен, алиас родителя не входит в URI ребёнка. Так уровень группировки существует в данных, но не появляется в адресе.

Что когда брать

Брать
Страница, которую редактор пишет и переставляетРесурс MODX
Много страниц из данных, каждой нужен свой адрес и метаpb_resources
Страница с логикой и без сохранённой строки вообщеВиртуальную страницу

Все три уживаются вместе. Раздел каталога может быть ресурсом, его тысячи позиций — своими ресурсами, а фильтр — виртуальной страницей: на одном сайте и в одних шаблонах.

© PageBlocks 2019-present