Пагинация и USEL

При выборке списка объектов или страниц с помощью 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.

Вот и все. Все очень просто.

Простой и понятный online-курс для обучения XSLT-программиста с любого базового уровня

Июл30

Один отзыв на «Пагинация и USEL»

  1. Александр пишет:
    29 Июл 2016 в 14:58

    Написал сильно кастомный фильтр для подбора и все никак не мог сделать, что бы пагинация заработала. А с xslt не дружу.

    Спасибо Вам большое, все сделал.

Ваш отзыв