Дата публикации
27 Мая 2019
Дата изменения
4 Июля 2020
Уникальных просмотров
2.090

Оглавление

Что такое шаблон в 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,1407 s
Время запросов: 0,1407 s
Количество запросов: 24
Источник: cache