Пагинация и USEL
Рубрика: Тонкости UMI CMS
При выборке списка объектов или страниц с помощью USEL программист зачастую сталкивается с проблемой вывода списка страниц для указанной выборки. Это весьма усложняет жизнь разработчику, заставляя его писать отдельно преобразование под USEL-пагинацию и отдельно — под обычную выборку.
Однако в юми этот вопрос решен просто и весьма элегантно. Существует макрос, который называется system/numpages. Он с легкостью решает задачу получения перечня страниц с указанием текущей и ссылками вперед/назад. При этом все указанные параметры он проверяет на уровне системных переменных. Самое главное — правильно формировать вызов usel в части использования оператора limit.
Вот ссылка на официальную документацию по указанному макросу: http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/virtualnyj_modul_system/system_numpages/#xslt-templating
Вызывать этот макрос нужно так:
document(concat('udata://system/numpages/', total, '/', $per_page))
где:
- total — это общее количество объектов, полученных через usel (см. документацию по usel)
- $per_page — переменная, содержащая количество объектов на одной странице
В результате вызова будет сформирован весь набор страниц и дополнительных переменных, который необходим для корректного отображения пагинации.
И, если для обычного вывода списка страниц вы используете конструкцию вида:
<xsl:apply-templates select="total" />
где шаблон, обрабатывающий total, формирует тот же самый вызов numpage, только с параметром per_page, присутствующем в выборке, то для вывода списка страниц под запрос протокола UMI USEL нужно вызвать конструкцию:
<xsl:apply-templates select="document(concat('udata://system/numpages/', total, '/', $per_page))" />
И в этом месте уже будет осуществлен непосредственный вызов шаблона numpages.
Естественно, что среди ваших шаблонов должен быть такой, которые обрабатывает макрос numpages.
Вот и все. Все очень просто.
Июл30
29 Июл 2016 в 14:58
Написал сильно кастомный фильтр для подбора и все никак не мог сделать, что бы пагинация заработала. А с xslt не дружу.
Спасибо Вам большое, все сделал.
19 Окт 2018 в 18:45
Спасибо, сэкономило время, значительно!
20 Окт 2018 в 12:46
Ещё бы добавил, что нужно в usel передать переменную ?p=0,1,2…
Я дела так:
Другого способа не нашёл.
Спасибо.