Разбить вывод pdoResources на несколько колонок (блоков)

В мае 2018 года у сниппета pdoResources нет стандартной возможности разбить вывод на 2 равные части. Но зато у нас есть возможность написать простой сниппет для реализации наших необузданных желаний!

[[!pdoResources?
    ....
    &toSeparatePlaceholders=`column_item_`
]]
[[!printColumnItem?
    &placeholderName=`column_item_`
    &colums=`2`
    &wrapperTpl=`blog_colum_wr`
]]

Пишем сниппет printColumnItem:

$phn = $placeholderName;
$colums = (int)$colums ? (int)$colums : 2;
if(empty($wrapperTpl)){
    echo "Для сниппета printColumnItem не указан параметр wrapperTpl";
}
if(empty($placeholderName)){
    echo "Для сниппета printColumnItem не указан параметр placeholderName";
    return;
}

foreach ($modx->placeholders as $key => $ph) {
    if (strpos($key, $phn) === 0 && $key != $phn."log") {
        $placeholders[$key] = $ph;
    }
}
$output = "";

foreach(array_chunk($placeholders, count($placeholders) / $colums) as $column){
    $data = "";
    foreach($column as $v){
        $data .= $v;
    }
    $output .= $modx->getChunk($wrapperTpl,array('output' => $data));
}
return $output;

Пример чанка blog_colum_wr:

<div class="col-sm-12 col-md-6">[[+output]]</div>

Комментарии (4)

  1. TITAN-UZ 28 мая 2019, 15:40 # 0
    Спасибо
    1. Елена 25 июня 2019, 06:45 # 0
      Добрый день!

      Скажите, а как в этом случае ограничить количество записей в блоке?
      1. Ник 14 сентября 2019, 04:07 # 0
        Спасибо! Немного модернизировал сниппет, чтобы он выдавал плейсхолдеры — [[+column1]], [[+column2]] и т.д. Удобно, если чанки обертки отличаются или стоят в разных частях кода.

        <?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;
        
        
        1. Александр 23 ноября 2019, 03:38 # 0
          Здравствуйте! Как можно в mFilter2 это решение использовать?

          В вызове mFilter2
          &toSeparatePlaceholders=`my.`
          *Комментарий будет опубликован после проверки модератором

          [MODx] Генератор настроек MIGX

          [MODx, MIGx] Документация на русском по MIGX

          [MODX] Импорт и экспорт в MiniShop2. Реализация 1

          [MODx] minishop2 tips

          [JS] Маска для ввода телефона +7(___)___-__-__

          [MODx, miniShop2] Генерация YML для выгрузки в маркет

          Как включить HTTPS (SSL) в MODX - Подробная инструкция

          [MODx] Подсказки по API

          [OpenCart] Вывести на главную все категории с картинками

          [MODx, MIGX] Примеры использования

          [MODx] Сайт на обслуживании (выключить сайт)

          Универсальная форма обратной связи — feedBackForm

          [PHP, JSON] Пример перевода с помощью Yandex Translate API

          [MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

          Расширение свойств товаров minishop2

          [Opencart] Вернуть английский язык, если вы его удалили

          [OpenCart] Вывести модуль напрямую через контроллер

          [MODx, Quip] Более рабочий вариант.

          [MODX, MIGX] Вывести getImageList только если он не пустой

          [MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

          Красивое адаптивное меню под pdoMenu

          [MODx] Создать источник файлов

          [MODx] Вывод tv-параметров в формате [название TV] - [значение TV]

          [PHP] Простое логирование

          [MODX] Вывести список всех опций MiniShop2

          Все записи