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

Во-первых, стоит отметить, что pdoPage без проблем обрабатывает результат работы getImageList и разбивает его на страницы.

[[!pdoPage?
  &element=`getImageList`
  &limit=`9`
  &tvname=`migx_image_in_content`
  &tpl=`migx_image_in_content_tpl`
  &docid=`[[*id]]`
]]

Но что делать, если есть задча сделать постраничный вывод не просто из одного ресурса, но из нескольких. То есть у нас есть список ресурсов, в каждом из которых заполнено доп. поле типа MIGX. Такой типа интернет-магазин на MIGX, где категориями выступают ресурсы, а товарами - строки MIGX (сомнительное решение, кстати говоря).

В итоге нам надо как-то передать в pdoPage общий список элементов. Но как это сделать, ведь getImageList принимает на вход id только одного ресурса. А если мы будем выводить через pdoResources, то у нас будут выводиться по очереди весь MIGX от каждого ресурса. И где-то это 2 товара, а где-то 70. Решение одно (которое я нашел, может есть и другие - пишите в комментариях) — изменить сниппет getImageList, чтобы он принимал на вход и обрабатывал список id.

Для этого внесем небольшую правку в getImageList. (Особо не тестировалось, и может быть что-то и сломалось. Но вроде работает:))

/* на ~ 124 строке находим:
  if (empty($outputvalue)) {
    $outputvalue = $tv->renderOutput($docid);
    if (empty($outputvalue) && !empty($inheritFrom)) {
 И заменяем код чтоб получилось: */
  if (empty($outputvalue)) {
// Webstool EDIT
$docids = explode(",",$docid);
if(count($docids) > 1){
  $temp_1 = array();
  foreach($docids as $v){
    $ta = $tv->renderOutput($v);
    $ta = json_decode($ta,true);
    foreach($ta as $tav){
      $temp_1[] = $tav;
    }
  }
    $outputvalue = json_encode($temp_1);
}else{
    $outputvalue = $tv->renderOutput($docid);
}
// Webstool EDIT END
// Original code: $outputvalue = $tv->renderOutput($docid);
            if (empty($outputvalue) && !empty($inheritFrom)) {

А также:

  // находим строчку:
  $output[$fields[$placeholdersKeyField]] = $chunk->process($fields);
  // И заменяем ее на:
  $output[] = $chunk->process($fields);

Теперь на вход может быть передана строка с перечислением через запятую id, и pdoPage распределит корректно по страничкам:

[[!pdoPage?
&element=`getImageList`
&tvname=`migx_image_in_content` 
&tpl=`migx_image_in_content_tpl`
&docid=`46,50,48,51,52,53,55,36,54,56,58`
&limit=`9`
]]

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

  1. Владимир 17 мая 2020, 17:34 # 0
    Спасибо за статью.

    У меня проблема — почему то повторяет значения полей. То есть, если, например в &docid=`1,2,3`, то выводит три раза значение поля из ресурса с id=1.

    Не подскажете, в чем может быть проблема?
    1. Сергей 12 июля 2023, 11:31 # 0
      Такая же самая история
    2. Alex 23 января 2024, 19:24 # 0
      Здесь опечатка:
      foreach($docids as $v){
          $ta = $tv->renderOutput($v); <----------------- $docid заменить на $v
          $ta = json_decode($ta,true);
          foreach($ta as $tav){
            $temp_1[] = $tav;
          }
        }
      
      1. Админ 23 января 2024, 19:29 # 0
        Спасибо, поправил
      *Комментарий будет опубликован после проверки модератором

      Комментарии easyComm

      Гарик 17 марта 2018, 22:38

      А можно уточнить какой код заменить, а то проблемка (Parse error: syntax error, unexpected end of file in /home/wedsiteb/beautypub/core/cache/includes/elements/modsnippet/21.include.cache.php on line 469)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      Вывод 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

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

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

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

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

      getResources заготовки

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      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