Коротко: шаблон определяет устройство страницы, чанк хранит повторяемую разметку, а TV добавляет данные конкретному ресурсу. Такой порядок помогает менять общий вид сайта в одном месте, не переписывая каждую страницу.
Когда MODX-сайт растёт, у него появляются страницы с похожими частями: шапка, подвал, карточки и формы. Если скопировать всю разметку в каждый документ, небольшая правка превращается в обход десятков страниц. Разделение на шаблон, чанки и поля решает эту задачу.
Шаблон: каркас страницы
Шаблон выбирают для типа страницы: услуги, статья, список материалов. В нём располагаются общие секции и место для специфического содержания. Например, шаблон статьи может использовать общую основу сайта:
{extends 'template:wm-base-v2'}
{block 'main'}
<article>...содержание статьи...</article>
{/block}
Основа отвечает за документ HTML, общие стили, меню и подвал. В дочернем шаблоне меняется только нужный блок. Это рабочий принцип нашего сайта; названия блоков и шаблонов в другом проекте могут быть иными.
Чанк: повторяемая часть
Повторяющийся фрагмент удобно вынести в чанк. Так устроены, например, карточки статей в ленте: структура у всех одна, а заголовок, описание и ссылка приходят из выбранного ресурса.
<article class="article-card">
<h3><a href="{$_modx->makeUrl($id)}">{$pagetitle | escape}</a></h3>
<p>{$description | escape}</p>
</article>
Вызов списка и передача данных в чанк зависят от используемого сниппета. В нашем блоге для этого применяется pdoPage с параметром tpl.
TV: данные конкретной страницы
TV (Template Variable) — дополнительное поле ресурса. Например, preview_img хранит путь к обложке, а richtext1 — текст статьи в действующей редакционной модели. TV привязывают к нужным шаблонам; тогда редактор видит поле только там, где оно имеет смысл.
{if $_modx->resource.preview_img?}
<img src="{$_modx->resource.preview_img | escape}" alt="">
{/if}
Этот короткий пример показывает обращение к полю. Для публикации изображения обычно нужны полный корректный путь, нужный размер и осмысленный alt, если картинка несёт информацию.
Как выбрать место для нового блока
- Меняется на каждой странице? Храните значение в поле ресурса или TV.
- Повторяется один и тот же HTML? Вынесите разметку в чанк.
- Определяет устройство целого типа страниц? Размещайте логику в шаблоне.
Не обязательно создавать TV для каждой строки текста. Если часть страницы одинакова на всех материалах этого типа, её проще поддерживать в шаблоне или чанке. Дальше можно разобраться с базовыми примерами Fenom и проверкой пустых полей.