Для вывода ресурсов по шаблону в 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 391