Skip to content

Настройки ​

Три системные настройки 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_includetrue{include} компилируется в тело родителя
force_verifytrueнеобъявленная переменная — пустая строка, а не warning
force_compile, disable_cachefalseартефакт пишется на диск и переиспользуется
disable_native_funcsне заданасм. Функции PHP

Очистка кэша ​

Скомпилированные шаблоны лежат в core/cache/pbfenom/. Сброс кэша из менеджера MODX вызывает:

php
View::clearCache();

Отдельно чистить каталог руками не нужно — при auto_reload правка файла и так приводит к перекомпиляции.

© PageBlocks 2019-present