Настройки
Три системные настройки MODX, область parser:
| Настройка | Что делает | По умолчанию |
|---|---|---|
pageblocks_elements_path | Каталог файловых шаблонов для @FILE и file:. | {core_path}App/elements/ |
pageblocks_file_elements_only | Брать шаблоны только из файлов, чанки из базы не использовать. | false |
pageblocks_fenom_auto_reload | Перекомпилировать шаблон, когда файл изменился. | true |
В этой же области лежит четвёртая настройка, pageblocks_default_chunks, и заполнять её руками не надо: она хранит sha1 каждого поставочного чанка, чтобы обновление отличало ваши правки от наших. Если её очистить, следующее обновление сочтёт отредактированными все дефолтные чанки и ни один не обновит.
Путь абсолютный, а не «от core/»
Значение подставляется в файловый путь целиком, поэтому оно должно быть абсолютным. Подстановки {core_path}, {base_path}, {assets_path} MODX раскрывает сам — на этом и держится дефолт {core_path}App/elements/. Написать App/elements/ нельзя: путь посчитается от текущего рабочего каталога, каталог не найдётся, и в лог уйдёт [Fenom Init] Template directory does not exist.
pageblocks_file_elements_only
Настройка значит «элементы из базы запрещены», а не «имя без префикса читать как файл». Она для проектов, где элементы держат в git, а не в базе.
view()и&tplс именем без префикса — ошибка, и в логе сразу написано, как её исправить:file elements only mode is on, so 'card' has nowhere to come from: name the source - file:card;- внутри шаблона провайдером по умолчанию становится файловый, поэтому
{include 'header'}ищетheader.tplна диске; - провайдер
template:не регистрируется вовсе; - дефолтные чанки компонента продолжают работать — они специально разрешаются мимо этой настройки, чтобы сниппет без
&tplпо-прежнему что-то выводил.
Почему ошибка, а не молчаливая подмена
Иначе один и тот же вызов значит разное на разных сайтах: копипаста из этой документации перестала бы работать без объяснения, а верстальщик, создавший чанк в менеджере, не смог бы понять, почему тот проигнорирован. Глобальный флаг, втихую меняющий смысл синтаксиса, заодно делает невозможным смешанный проект.
pageblocks_fenom_auto_reload
Выключать в продакшене имеет смысл только там, где шаблоны не меняются между деплоями: выключенная настройка означает, что правка .tpl не подхватится, пока не сбросят кэш. В pbFenom проверка актуальности дешёвая — realpath() убран с горячего пути, страница с {extends} и двадцатью {include} стоит 7,6 мкс против 4,5 мкс без автоперезагрузки, — так что экономия здесь небольшая.
Что жёстко задано в коде
Остальное движок получает из View::init(), настройками это не правится:
| Опция | Значение | Почему |
|---|---|---|
| каталог кэша | core/cache/pbfenom/ | чистится вместе с кэшем MODX |
force_include | true | {include} компилируется в тело родителя |
force_verify | true | необъявленная переменная — пустая строка, а не warning |
force_compile, disable_cache | false | артефакт пишется на диск и переиспользуется |
disable_native_funcs | не задана | см. Функции PHP |
Очистка кэша
Скомпилированные шаблоны лежат в core/cache/pbfenom/. Сброс кэша из менеджера MODX вызывает:
View::clearCache();Отдельно чистить каталог руками не нужно — при auto_reload правка файла и так приводит к перекомпиляции.