Пагинация и 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.

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

Июл30

3 комментария на «Пагинация и USEL»

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

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

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

  2. Антон пишет:
    19 Окт 2018 в 18:45

    Спасибо, сэкономило время, значительно!

    • Антон пишет:
      20 Окт 2018 в 12:46

      Ещё бы добавил, что нужно в usel передать переменную ?p=0,1,2…
      Я дела так:

      Другого способа не нашёл.
      Спасибо.

Ваш отзыв