Для правильного отображения элементов, иногда требуется вставить html код после определенного элемента выборки Ditto на MODX Evolution или getResources/getProducts/pdoResources в MODX Revolution. Рассмотрим оба эти варианты, а так же сниппет для автоматизации подобного действия.


Evolution (Ditto)

Для работы необходим сниппет if.
Пример кода, который будет вставлен после каждого 3 элемента:
[[if? &is=`[+ditto_index+]:%:3` &math=`on` &then=`<div class="clearfix"></div>`]]
Возможно, пригодится такой вариант, для оборачивания каждого 2:
[[if? &is=`[+ditto_iteration+]:%:2` &math=`on` &then=`</li><li class="wow">`]]

Revolution

Каждый 3 элемент:
[[+idx:ne=`1`:and:mod=`3`:is=`0`:then=`<div style="clear: both;"></div>`]]

Сниппет, найден на просторах интернета, который группирует элементы с настройкой параметров. Автора, к сожалению, не знаю.

groupResources
<?php
$output = '';
  
$groupTag = $scriptProperties['groupTag'];
$snip = $scriptProperties['snippet'];
if(!isset($scriptProperties['outputSeparator'])) {
    $scriptProperties['outputSeparator'] = '||';
}
  
if(!isset($groupTag)) {
    $groupTag = 'ul';
}
  
if(isset($scriptProperties['groupClass'])) {
    $markupOpen = $groupTag.' class="'.$scriptProperties['groupClass'].'"';
} else {    
    $markupOpen = $groupTag;
}
  
$rows = $modx->runSnippet($snip, $scriptProperties);
$rows = explode($scriptProperties['outputSeparator'],$rows);
  
$numItems = count($rows);
foreach ($rows as $i => $row) {
    $output .= $row;
    if ($i == 0){
        echo '<'.$markupOpen.'>';
    }
    if (($i + 1) % $scriptProperties['group'] == 0) {
          
        if($i != $numItems-1) {
            $output .= "\n</".$groupTag.">\n<".$markupOpen.">\n";
        } else {
            $output .= "\n</".$groupTag.">\n";
        }
    }
}
return $output;

Вызываем в нужном месте следующим образом:

[[groupResources? &group=`3` &groupTag=`div` &groupClass=`clearfix` &snippet=``]]