Skip to content

Типы шаблонов

Имя шаблона начинается с префикса — он же и решает, откуда шаблон берётся.

ПрефиксОткуда берётсяПример
@INLINEкод шаблона прямо в строкеview('@INLINE Hello, {$name}')
@FILE / file:файл внутри pageblocks_elements_pathview('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 поверх.

php
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/:

php
view('file:blocks/article.tpl');
// => ищет: core/App/elements/blocks/article.tpl

path: и @PATH — наоборот, несут путь в себе и pageblocks_elements_path игнорируют. Путь пишется от корня сайта или абсолютным, понимает подстановки {core_path}, {base_path}, {assets_path}, и .. в нём запрещены:

php
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():

fenom
{extends 'file:templates/base.tpl'}
{include 'path:assets/chunks/hero'}
{include 'header'}            {* без префикса - чанк MODX *}

Только файлы

При pageblocks_file_elements_only = true провайдер template: вообще не регистрируется, а любое имя без префикса трактуется как file:. Чанки из базы перестают быть доступны — и в view(), и в {include}.

© PageBlocks 2019-present