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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

              getResources заготовки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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