Допустим, у нас есть вот такой дизайн, где блоки чередуются по 3 вряд и по 2 вряд через каждую строку:
Если использовать связку pdoTools
+ бутстрап
то реализация самая очевидная: col-lg-4
для 3 в ряд и col-lg-6
для 2 в ряд. Но задать такое правило для pdoTools
достаточно проблематично. К сожалению, такие варианты как nth-child от CSS, idx от pdoTools, tplFirst, tplLast, tplOdd, tpl_N, а также tplCondition вместе с tplOperator и conditionalTpls не помогли реализовать такое правило, поэтому единственный выход был написать такой сниппет:
<?php
$tplThree = $modx->getOption('tpl_three', $scriptProperties, 'articles_card_3_tpl');
$tplTwo = $modx->getOption('tpl_two', $scriptProperties, 'articles_card_2_tpl');
$out = '';
$result = $modx->runSnippet('pdoResources',[
'parents' => $modx->resource->id,
'limit' => 12,
'depth' => 0,
'sortby' => 'publishedon',
'sortdir' => 'ASC',
'includeTVs' => 1,
'includeTVList' => 'image,chars',
'depth' => 0,
'return' => 'json'
]);
if(!empty($result)) {
$pdo = $modx->getService('pdoTools');
$queue = 3;
$counter = 1;
$idx = 1;
foreach(json_decode($result, true) as $item) {
$item['idx'] = str_pad($idx, 2, '0', STR_PAD_LEFT);
switch($queue) {
case 3:
if($counter == 3) {
$queue = 2;
$counter = 1;
}else{
$counter++;
}
$out .= $pdo->parseChunk($tplThree, $item);
break;
case 2:
if($counter == 2) {
$queue = 3;
$counter = 1;
}else{
$counter++;
}
$out .= $pdo->parseChunk($tplTwo, $item);
break;
}
$idx++;
}
}
return $out;