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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

              getResources заготовки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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