Разбить вывод 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>

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

  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.`
          1. kgb3000 01 ноября 2021, 00:09 # 0
            Искал как раз подобное решение для выведения в 2 столбца.
            Делаю все по инструкции, но при использовании toSeparatePlaceholders сыпятся ошибки
            ../core/cache/includes/elements/modsnippet/30.include.cache.php 58
            PHP warning: Illegal string offset 'log'
            ../core/cache/includes/elements/modsnippet/30.include.cache.php 58
            PHP warning: Cannot assign an empty string to a string offset
            1. kgb3000 01 ноября 2021, 00:11(Комментарий был изменён) # 0
              {'!pdoResources' | snippet: [
              'parents' => '1',
              'limit' => '10',
              'sortby' => 'pagetitle'
              'toSeparatePlaceholders' => 'column_item_'
              ]}
              *Комментарий будет опубликован после проверки модератором

              Похожие статьи

              Генератор настроек MIGX

              Документация на русском по MODX MIGX

              Подсказки по работе и заготовки для MiniShop2

              pdoPage и getImageList - Постраничная навигация MIGX

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

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

              Генерация YML для выгрузки в маркет

              Примеры работы с API MODX

              Примеры выборки where, optionFilters, innerJoin

              pThumb - ресайз изображений. Примеры использования.

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

              Примеры использования

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

              Добавить в письмо контактную информацию

              Вывести getImageList только если он не пустой

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

              Оформление и настройка easyComm. Комментарии и отзывы на сайте.

              Поиск на сайте с пакетом SimpleSearch

              Простая и симпатичная галерея fancybox

              Подсчет и вывод количества потомков ресурса в MODX

              Вывод tv-параметров в формате -

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

              Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

              Quip для MODX. Более рабочий вариант

              pdoResources Заготовки для работы

              Сниппет для вывода размера и расширения файла

              Простой аудио-плеер HTML5

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

              Слайдер Slick slider в контенте ресурса

              Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

              Как контролировать кэш CSS и скриптов

              Подключить MODX в стороннем PHP файле

              Простейшая авторизация

              Как создать ресурс процессором $modx->runProcessor('resource/create', $props)

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

              Массово обновить ТВ, или другое поле через базу

              Создать свою страницу в админке

              Изменить формат номера заказа

              Сообщение о том, что сайт использует Cookie

              Получить grandparent. Вывести родитель родителя

              Симпатичный список файлов, загружаемых к ресурсу через MIGX

              Установить шаблон по-умолчанию для новых, создаваемых ресурсов

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

              Вывести все доступные плейсхолдеры

              Отредактировать шаблон письма

              Добавить скрипт перед тегом body

              Общая сумма по каждому товару в корзине Minishop2

              Создать раздел с паролем на сайте MODX

              Что делать если ее приходит почта администратору

              Фильтрация по TV параметрам в msProducts

              Дата на русском

              FontAwesome - часто используемые иконки для шаблонов MODX

              Создать пакет с пользовательской таблицей

              Курсы валют с cbr.ru на PHP

              Заготовки для работы

              Загрузка сниппета после загрузки страницы через AjaxSnippet

              getResources заготовки

              Обязательный чекбокс при оформлении заказа

              Соответствие названия классов с названиями таблиц в MySQL

              Обработка остатков заказа в miniShop2

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

              Баннеры с использованием BannerY

              Обновить alias (псевдоним) у всех ресурсов

              CSS для постраничной навигации pdoPage

              Вывести время загрузки (формирования) страницы

              Расширить таблицу site_content (объект modResource) за 5 минут

              Вырезать кавычки — фильтр-сниппет MODX

              Счетчик посещений и скачиваний для сортировки ресурсов

              Динамическое поле emailSubject в FormIt

              Бесплатная доставка от 5000 рублей в MiniShop2

              Скрыть информацию о том, что сайт работает на MODX

              Отсортировать ресурсы по количеству комментариев Quip MODx

              Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

              Создать редирект через autoRedirector API

              Вывести 404 ошибку по настройке TV MODX

              Ответ для сервиса moneta.ru

              Email сделать не обязательным полем

              Как разместить исходный код сниппета на сайте, в документации

              Cортировать по списку id в pdoResources и pdoTools

              Ускорить установку MODX revo до пары кликов

              Постраничная навигация — набор параметров и CSS PdoPage

              Не работает подгрузка товаров ajax mfilter2 на мобильном

              Сделать все элементы статичными для Git и IDE

              Сделать поле размер обязательным

              Настройка стилей для комментариев Tickets

              Подключить текстовой редактор к доп. полям ресурса

              Кастомный чанк для AdminPanel

              Динамическая замена шаблона ресурса - плагин

              Разместить корзину внутри блока с оформлением заказа

              Плагин для формирования замороженных URL с редиректом

              Приветственный экран / заглушка на сайт

              Вывести список всех родителей в ТВ поле ресурса

              xPDO Выборка из одной таблицы с зацепкой значения из другой

              Вложенные условия в xPDO MODX

              Вывести список всех емэйлов miniShop2

              Если getParentIds не работает в плагине

              Как получить данные пользователя сразу после авторизации через API

              Контролировать кэширование файлов CSS и JS MiniShop2

              Не приходят / не отправляются письма - в чем причина?

              Кэширование в MODX: использование $modx->cacheManager

              Наш сайт использует куки, нажмите «ОК» если вы не против
              OK