Содержание:
Разделить ресурсы на блоки в pdoResources mFilter2
Александр, здравствуйте, бывает что нужно в анонсах pdoResources или mFilter2, между ресурсами что-то вывести к примеру баннер или разделить по блокам для того чтобы по разному их стилизовать и тому подобное.
В pdoResources, это можно сделать так:
Создать сниппет: printColumnItem
Александр если возможно, расскажите пожалуйста, как можно использовать этот вариант в mFilter2? Учитывая что параметр toSeparatePlaceholders в вызове фильтра:
В pdoResources, это можно сделать так:
Создать сниппет: printColumnItem
<?php $phn = $placeholderName; $colums = (int)$colums ? (int)$colums : 2; $cols = array(); if(empty($placeholderName)){ echo "Для сниппета printColumnItem не указан параметр placeholderName"; return; } foreach ($modx->placeholders as $key => $ph) { if (strpos($key, $phn) === 0 && $key != $phn."log") { $placeholders[$key] = $ph; } } $qw = 0; foreach(array_chunk($placeholders, count($placeholders) / $colums) as $column){ $data = ""; foreach($column as $v){ $data .= $v; } $cols['column'.(++$qw)] = $data; } $modx->setPlaceholders($cols); return;В шаблон:
[[!pdoResources? &tpl=`Чанк оформления` &toSeparatePlaceholders=`column_item_` ]] [[!printColumnItem? &placeholderName=`column_item_` &colums=`2` ]]Плейсхолдеры: [[+column1]], [[+column2]]
Александр если возможно, расскажите пожалуйста, как можно использовать этот вариант в mFilter2? Учитывая что параметр toSeparatePlaceholders в вызове фильтра:
&toSeparatePlaceholders=`my.`
С mFilter2 так не получится. Плейсхолдер [[+my.results]] будет содержать весь результат, он не будет как в случае с pdoResources разделён на отдельные плейсхолдеры с индексами.
А зачем это делать? Задачи, которые вы описали можно решить с помощью CSS и JavaScript.
Для стилизации блоков по разному в зависимости от их порядкового номера можно выполнить с использованием CSS селекторов :nth-child и :nth-of-type.
Вывести баннер между блоками можно выполнить с помощью JavaScript.
Например, следующий javascript код вставит блок после каждого третьего элемента в результате:
И как сделать вывод, только перед первым?
Перед первым можно так:
Если нужно для подгрузки данных, то тогда нужно ещё писать какую-то дополнительную логику. Тут всё засисит что необходимо.
Например, если подгружаем по 10 штук записей, то можно так:
В этом случае баннер бедут вставляться, сначала после 3, потом после 13 записи, 23 записи и т.д.