MODX Revo: разбить ресурсы на колонки - сниппет multiCols

MODX Revo: разбить ресурсы на колонки - сниппет multiCols

Для вывода ресурсов по шаблону в MODX Revo обычно испльзуем pdoResources или getResources. Этих дополнений хватает для 99,9% случаев. Но иногда возникает экзотическая задача разбить выборку по колонкам, и вызвать эти колонки в различных частях разметки кода HTML.

Для этих целей в нашей студии по разработке сайтов есть удобная и компактная заготовочка. Вы можете взять готовый код сниппета на github. В посте я опишу его возможности и способы использования.

Возможности сниппета multiCols

Сниппет для разбиения выборки ресурсов на колонки принимает следующие параметры:

  • cols - на сколько колонок разбиваем выборку (по умолчанию 2)
  • limit - ограничение выборки (по умолчанию 0)
  • sortby - поле для сортировки (по умолчанию menuindex)
  • sortdir - направление сортировки (по умолчанию ASC)
  • select - поля через запятую, которые надо выбрать у ресурса
  • tvs - json дополнительных полей для выборки &tvs=`{"image":2}`, нужно указать имя и id дополнительного поля
  • where - json условий для выборки (по умолчанию published=1, deleted=0)
  • tpl - имя чанка шаблона для представления элемента

При вызове сниппет не возвращает ничего - он устанавливает плейсхолдеры. Столько плейсхолдеров - насколько колонок надо было разбить выборку. К примеру, если надо сделать разбиение на 2 колонки, то в коде после вызова сниппета будут доступны плейсхолдеры [[+column1]], [[+column2]]. Количество ресурсов в непоследней колонке определяется по формуле n/cols с округлением до ближайшего нижнего целого. В самой последней колонке выводится больше ресурсов на остаток от деления, чем во всех остальных.

Внимание! Сниппет не поддерживает обработку источников файлов. Т.е. если tv с изображением имеет источник файлов, отличный от FileSystem, то basePath надо указать явно!

Дополнительные поля в файле шаблона вызываются без префиксов. К примеру, если вы подключали tv под именем image, то оно будет доступно как [[+image]].

Пример вызова сниппета

    [[multiCols?
        &cols=`2`
        &tvs=`{"image":1}`
        &select=`pagetitle,introtext`
        &where=`{"published":1, "deleted":0, "parent":2}`
        &sortby=`publishedon`
        &sortdir=`DESC`
        &tpl=`tpl_article`
    ]]

Количество просмотров: 2 117

Поделиться в соцсетях:

Статьи по теме