Шаблоны
Шаблоны в MODx обычно содержат теги HTML-разметки, которые определяют макет и внешний вид либо вашего сайта, либо ваших страниц, в зависимости от выбранного шаблона.

Оглавление
Что такое шаблон в MODx?
Шаблоны в MODx обычно содержат теги HTML-разметки, которые определяют макет и внешний вид либо вашего сайта полностью, либо страниц сайта отдельно, в зависимости от выбранного шаблона. Когда запрашивается документ MODx загружает его шаблон. Затем парсер MODx находит все плейсхолдеры в шаблоне и заменяет их соответствующими значениями из документа перед отправкой готовой страницы в браузер пользователя.
Ресурсы могут использовать только один шаблон за раз, однако можно переключать шаблоны в любое время. Делать это можно как вручную, так и автоматически, написав, например плагин. Простой пример скрипта, который найдет все ресурсы с шаблоном id=1
и заменит на шаблон id=2
.
<?php
/**
* @author iWatchYouFromAfar https://webinmind.ru
* Изменение всех ресурсов с шаблоном $oldTemplate на шаблон $newTemplate
*
*/
$start = microtime(true);
$oldTemplate = 1; // идентификатор старого шаблона
$newTemplate = 2; // идентификатор нового шаблона
$resources = $modx->getCollection('modResource',array('template' => $oldTemplate));
foreach ($resources as $res) {
if ($res->get('template') == $oldTemplate) {
$res->set('template', $newTemplate);
$res->save();
}
}
// Clear cache
$modx->cacheManager->clearCache(array(
'/resource/'
));
echo 'Всего ресурсов изменено: ' . count($resources). '<br>';
echo 'Время выполнения скрипта: ' . round(microtime(true) - $start, 4).' сек.';
Создание шаблона
Чтобы создать шаблон, разверните вкладку дерева «Элементы» и щелкните правой кнопкой мыши на раздел «Шаблоны». Выберите «Быстро создать шаблон» или «Новый шаблон», затем вставьте свой HTML-код в текстовое поле «Код шаблона».
Простой пример шаблона MODx:
<!doctype html>
<html lang="ru">
<head>
<title>[[*pagetitle]]</title>
<meta name="description" content="[[*description]]"/>
</head>
<body>
<h1>[[*longtitle]]</h1>
Идентификатор страницы: [[*id]]<br/>
Анонс: [[*introtext]]<br/>
Menu Title: [[*menutitle]]
<hr/>
[[*content]]
</body>
</html>
Обратите внимание на важный тег [[*content]]
. Этот тег сообщает MODx, куда поместить содержимое ресурса.
MODx по умолчанию хранит шаблоны в своей базе данных, если вы используете версию до 2.2.x, это ваш единственный вариант. В MODX 2.2.x и новее, у вас есть возможность сохранять шаблоны в виде статических файлов с использованием Media Sources.
Помните, что простое создание шаблона не означает, что он автоматически будет использоваться на страницах сайта. Вы должны отредактировать каждый ресурс и указать ему, какой шаблон он будет использовать. Каждая страница в MODx имеет один шаблон, который она использует для форматирования и вывода данных. После того, как вы создали один или несколько шаблонов, вы можете отредактировать любой ресурс и выбрать из раскрывающегося списка шаблон.
Шаблоны могут содержать любые теги, в том числе Дополнительные поля (TV), Чанки, Сниппеты и другие.
Использование полей ресурса в шаблоне
Как вы заметили из примера кода шаблона выше, на поля ресурса можно ссылаться, используя синтаксис [[*fieldName]]
. Список доступных полей ресурсов можно найти здесь. Например, если мы хотим вывести заголовок текущего ресурса в теге <title>
, мы просто сделаем так:
<title>[[*pagetitle]]</title>
Вы также можете вывести содержимое текущего ресурса, используя тег [[*content]]
:
<body>
[[*content]]
</body>
Это обычные теги MODx и к ним могут быть применены фильтры модификаторы. Например, допустим, мы хотим отобразить поле «introtext» на правой панели, но убрать из него любые HTML-теги и отобразить только первые 400 символов — и, если это поле длиннее, добавить многоточие «…»:
<div class="rightbar">
[[*introtext:stripTags:ellipsis=`400`]]
</div>
Дополнительные поля (TV) в шаблонах
Вы можете иметь бесконечное количество дополнительных полей в шаблоне. Скажем, вам нужно поле для фотографий в ваших ресурсах в шаблоне «BiographyPages». Просто — просто создайте TV, назовите его «bioPhoto», присвойте ему тип ввода и вывода «image» и назначьте его шаблону «BiographyPages». Затем вы увидите этот TV в любом ресурсе, который использует этот шаблон.
Затем вы можете ссылаться на ваш TV «bioPhoto» в вашем контенте с тем же синтаксисом тега, что и в поле ресурса:
<div class="photo">
[[*bioPhoto]]
</div>
Опять же, важно отметить, что TV поля должны быть явно назначены шаблону, который будет использоваться. Если вы не видите созданный вами TV в своих ресурсах, убедитесь, что вы назначили для этого TV нужный шаблон.
Время запросов: 0,1045 s
Количество запросов: 24
Источник: cache