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