Разбить вывод 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 в контенте ресурса

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

              getResources заготовки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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