Типы шаблонов
Имя шаблона начинается с префикса — он же и решает, откуда шаблон берётся.
| Префикс | Откуда берётся | Пример |
|---|---|---|
@INLINE | код шаблона прямо в строке | view('@INLINE Hello, {$name}') |
@FILE / file: | файл внутри pageblocks_elements_path | view('file:blocks/card.tpl') |
@PATH / path: | файл по произвольному пути | view('path:assets/chunks/hero') |
template: | шаблон MODX из базы | view('template:base') |
| без префикса | чанк MODX (modChunk) по имени | view('header') |
Запаса хода нет
Префикс выбирает один источник, а не порядок перебора. view('header') ищет чанк header и, не найдя его, к файлам не идёт; view('file:header') ищет файл и не смотрит в чанки. Не нашлось — в лог MODX пишется [Fenom]: Template … not found, а шаблон отдаёт пустую строку. Пустое место на странице вместо ошибки — это почти всегда оно.
Расширение
Файловым шаблонам (file:, path:) расширение можно не писать — тогда подставится .tpl. Готовые .tpl и .html берутся как есть; любое другое расширение движок расширением не считает и допишет .tpl поверх.
view('file:blocks/article'); // → blocks/article.tpl
view('file:blocks/article.tpl'); // → blocks/article.tpl
view('file:mail/invoice.html'); // → mail/invoice.html📁 Где лежат файловые шаблоны
file: и @FILE отсчитываются от каталога pageblocks_elements_path, по умолчанию это core/App/elements/:
view('file:blocks/article.tpl');
// => ищет: core/App/elements/blocks/article.tplpath: и @PATH — наоборот, несут путь в себе и pageblocks_elements_path игнорируют. Путь пишется от корня сайта или абсолютным, понимает подстановки {core_path}, {base_path}, {assets_path}, и .. в нём запрещены:
view('path:assets/chunks/hero'); // → /assets/chunks/hero.tpl
view('path:{core_path}elements/mail/ok'); // → core/elements/mail/ok.tplЭто тот же механизм, что у поля «Папка чанка» (chunk_path) в блоке: он позволяет держать чанки рядом с кодом, который их использует, а не сваливать всё в один каталог.
Внутри шаблона
Те же префиксы работают в {include}, {extends} и {insert} — это провайдеры движка, а не разбор в view():
{extends 'file:templates/base.tpl'}
{include 'path:assets/chunks/hero'}
{include 'header'} {* без префикса - чанк MODX *}Только файлы
При pageblocks_file_elements_only = true провайдер template: вообще не регистрируется, а любое имя без префикса трактуется как file:. Чанки из базы перестают быть доступны — и в view(), и в {include}.