К содержанию

MODX Revolution · практика

Шаблон, чанк и TV в MODX Revolution: как разделить разметку и данные

Как устроены шаблон, чанк и TV в MODX Revolution, где хранить повторяемую разметку и данные страницы.

Коротко: шаблон определяет устройство страницы, чанк хранит повторяемую разметку, а 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 и проверкой пустых полей.

Когда нужен второй взгляд

Нужна помощь с вашим сайтом?

Если задача выходит за рамки статьи, расскажите, что хотите исправить или добавить.

Обсудить задачу