Для правильного отображения элементов, иногда требуется вставить 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=``]]
Комментарии ()