MODX чанки

MODX чанки Разработка сайтов
Чанки - это небольшими фрагментами кода, которые можно использовать повторно на разных страницах сайта. По функциям они похожи на файлы или «блоки» в других системах управления контентом.

Чанки в MODX могут содержать любой HTML-код, CSS-стили, JavaScript-скрипты и другие элементы, необходимые для отображения страницы. Их в первую очередь используют чтобы разделить код, чтобы легче в нем ориентироваться, например вынести в них код шапки и подвала сайта, блоков контента и многого другого.

Чанки не могут содержать никакой php логики напрямую, но они могут содержать вызовы Сниппетов, которые являются исполняемыми битами кода PHP, которые производят динамический вывод.

Как создать чанк

Создать чанк в MODX очень просто. Для этого нужно зайти в дерево элементов, выбрать вкладку «Чанки» и нажать на «+», чтобы создать новый чанк.

Как создать новый чанк в MODX 3

Так же вы можете щелкнуть по вкладке чанки правой кнопкой мыши, чтобы вызвать контекстное окно.

Создаем чанк

Затем можно добавить в него нужный код и сохранить.

Использование

После создания чанка его можно использовать на любой странице сайта или в шаблонах, используя тег [[$ChunkName]] или [[!$ChunkName]], если нужно чтобы чанк вызывался не кэшированным. Например, если вы создали чанк с названием «Header», то чтобы добавить его на страницу, нужно вставить тег [[$Header]] в нужном месте шаблона страницы.

Вы также можете передать свойства в чанк. Скажем, у вас был чанк с именем intro и содержимым:

Привет, [[+name]]. У тебя есть [[+messageCount]] сообщений.

Вы можете заполнить эти значения с:

[[$intro? &name=`Сергей` &messageCount=`12`]]

Который будет выводить:

Привет, Сергей. У тебя есть 12 сообщений.

Вы могли бы сделать еще один шаг, добавив Переменные шаблона что позволяет пользователю указать свое имя для каждого ресурса:

[[!$intro? &name=`[[*usersName]]` &messageCount=`[[*messageCount]]`]]

или в самом чанке:

Привет, [[*usersName]]. У тебя есть [[*messageCount]] сообщений.

Обработка чанка через API

Чанки также часто используются для форматирования вывода сниппетов. Чанк может быть обработан из сниппета с помощью функции process(); например, с учетом следующего чанка с именем rowTpl:

<tr class="[[+rowCls]]" id="row[[+id]]">
<td>[[+pagetitle]]</td>
<td>[[+introtext]]</td>
</tr>

следующий сниппет кода извлекает его и обрабатывает его с массивом свойств для всех опубликованных ресурсов и возвращает отформатированные результаты в виде таблицы, устанавливая класс «alt» для четных строк:

$resources = $modx->getCollection('modResource',array('published' => true));
$i = 0;
$output = '';
foreach ($resources as $resource) {
  $properties = $resource->toArray();
  $properties['rowCls'] = $i % 2 ? '' : 'alt';

  $output .= $modx->getChunk('rowTpl',$properties);
  $i++;
}
return '<table><tbody>'.$output.'</tbody></table>';

Модификация чанка через API

Чанками также можно манипулировать с помощью MODX API:

<?php
/* create a new chunk, give it some content and save it to the database */
$chunk = $modx->newObject('modChunk');
$chunk->set('name','NewChunkName');
$chunk->setContent('<p>This is my new chunk!</p>');
$chunk->save();

/* get an existing chunk, modify the content and save changes to the database */
$chunk = $modx->getObject('modChunk', array('name' => 'MyExistingChunk'));
if ($chunk) {
    $chunk->setContent('<p>This is my existing chunks new content!</p>');
    $chunk->save();
}

/* get an existing chunk and delete it from the database */
$chunk = $modx->getObject('modChunk', array('name' => 'MyObsoleteChunk'));
if ($chunk) $chunk->remove();
?>

Практика — бьем статический html шаблон на чанки

Не создавайте сотни чанков, как многие рекомендуют, т. к. это создает нагрузки, да и администрировать сайт становится не очень удобно. Выносите только те элементы верстки, которые в последующем могут поменяться.

Обычно весь внешний вид сайта строится на одном дизайне (шаблоне), т. е. шапка, меню, подвал сайта на всех страницах одинаковые (сквозные), меняется внутренне наполнение, самый идеальный вариант разбития на мой взгляд следующий.

Выносим весь код шаблона (у на пока только один «Начальный шаблон», см. Интеграция шаблонов) в отдельный чанк tpl.

Быстро создаём чанк tpl и переносим в него код из шаблона

Далее вызываем данный чанк в самом шаблоне [[$tpl]] и сохраняем его.

Вызываем чанк в шаблоне и сохраняем его

Если сейчас перейти на главную, то все отеняться прежним (она точно также со всем перенесенным дизайном загрузится).

Далее открываем чанк tpl и вырезаем (или копируем) из него все кроме сквозных элементов (обычно это все кроме шапки и подвала), в моем случае это все, что находится в блоке main, после чего быстро создаем чанк с именем tpl.1 и вставляем в него данный код и сохраняем.

Переносим не сквозной контент в новый чанк

Секцию hero трогать не стал, т. к. она находится вне main и используется только на главной странице, мы ее потом вынесем, ну или если хотите то сразу ее можете вынести в чанк hero и вызвать его к примеру при помощи модификатора is: [[*id:is=`1`:then=`[[$hero]]`]].

На месте вырезанного кода вставляем вот такую конструкцию [[$tpl.[[*template]]]] и сохраняем чанк.

Сохраняем обновленный чанк

После переходим на главную страницу — она должна точно также загружаться, как и до разбивки на чанки.

Логика данной [[$tpl.[[*template]]]] конструкции: [[*template]] — это вызов стандартного поля modx: id шаблона который использует ресурс (в нашем случае это главная страница с Начальным шаблона, у которого id = 1).

id шаблона

Следовательно MODX превращает [[$tpl.[[*template]]]] в вызов нашего чанка [[$tpl.1]].

Для чего все это? В дальнейшем мы будем создавать дополнительные шаблоны (для типовых страниц, для статей и т.д.), вызывать во всех будем чанк tpl — так как там у нас шапка, подвал и другие сквозные элементы которые присутствуют на всех остальных страницах. У каждого нового шаблона будет свой id, следовательно, мы будем создавать дополнительные чанки tpl.2, tpl.3, …, tpl.7 и уже в них вносить недостающий контент.

Это все сильно упростит администрирование сайта, к примеру нам нужно подключить счетчик метрики либо что то поменять в шапке, идем в чанк tpl вносим изменения и они сразу отражаются на всех страницах сайта.

Далее предлагаю подробнее разобрать, что такое шаблоны и создать базовые шаблоны для других типов контента.

Оцените статью
( Пока оценок нет )
MODX 3
Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.