Чанки – это куски статического HTML-кода, которые могут содержать контактные данные, копирайты и т.д. Кроме того, чанки могут содержать вызовы полей ресурсов, других чанков, сниппетов и т.д.

Создание чанка

Перед тем как использовать чанк, вы должны сначала его создать, дать ему имя, код в панели администратора MODx (Элементы -> Чанки -> Новый чанк):

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

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

[ [$chunkName] ]

Этот тег затем заменяется содержимым чанка.

Вы также можете передать параметры в чанк. Допустим, у вас чанк под названием “intro” с содержанием:

Hello, [ [+name] ]. You have [ [+messageCount] ] messages.

Вы можете передать значения [ [+name] ] и [ [+messageCount] ] следующим способом:

[ [$intro? &name=`George` &messageCount=`12`] ]

На выходе вы получите:

Hello, George. You have 12 messages.

Вы также можете передать в чанк TV-параметры:

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

Или вы можете вызвать TV-параметры в Чанке: 

Hello, [ [+usersName] ]. You have [ [+messageCount] ] messages.

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

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

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

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

$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

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

<?php
/* создание чанка, заполнение его кодом и сохранение в БД */
$chunk = $modx->newObject('modChunk');
$chunk->set('name','NewChunkName');
$chunk->setContent('<p>This is my new chunk!</p>');
$chunk->save();
 
/* берем существующий чанк, изменяем контент и сохраняем в БД */
$chunk = $modx->getObject('modChunk', array('name' => 'MyExistingChunk'));
if ($chunk) {
    $chunk->setContent('<p>This is my existing chunks new content!</p>');
    $chunk->save();
}
 
/* берем существующий чанк и удаляем из БД */
$chunk = $modx->getObject('modChunk', array('name' => 'MyObsoleteChunk'));
if ($chunk) $chunk->remove();
?>