{{pager id="my_pager" items="10" total_items="$#total_items_in_list"}}
Показаны новости: с {$begin_item_number} по {$end_item_number}
{{pager:first}}Первая страница {{/pager:first}}
{{pager:list}}
{{pager:current}}{$number}{{/pager:current}}
{{pager:number}}{$number}{{/limb:pager:number}}
{{/pager:list}}
{{pager:last}}Последняя страница{{/pager:last}}
Всего новостей: {$total_items}
{{/pager}}
Центральный тег при постраничном разбиении - [[limb3:ru:packages:macro:tags:pager_tags:pager_tag|тег {{pager}}]], который ограничивает пейджер. Он содержит атрибут **items**, который указывает, какое количество элементов списка выводить на одной странице. Атрибут **total_items** указает на общее количество элементов в списке, разбиваемой на страницы. Номер текущей страницы pager узнает из $_GET автоматически.
[[limb3:ru:packages:macro:tags:pager_tags:pager_list_tag|Тег {{pager:list}}]] - огранизует вывод номеров страниц pager-а.
Остальные теги:
* [[limb3:ru:packages:macro:tags:pager_tags:pager_frontier_tag|Теги {{pager:prev}}, {{pager:first}}, {{pager:next}}, {{pager:last}}]] - выводят ссылку на предыдущую, первую, следующую и последнуюю страницы списка страниц.
* [[limb3:ru:packages:macro:tags:pager_tags:pager_current_tag|Тег {{pager:current}}]] - на текущую,
* [[limb3:ru:packages:macro:tags:pager_tags:pager_number_tag|Тег {{pager:number}}]] - на страницу с определенным номером.
Внутри каждого тега доступна переменная **$href**, содержащая ссылку на нужную страницу. Ссылка в $href содержит все параметры, которые есть в перменной $_GET, а также дополнительный параметр, указывающий на номер страницы pager-а. Теги %%{{pager:number}}%% и %%{{pager:current}}%% также содержат переменную **$number** - номер страницы.
Также внутри тега %%{{pager}}%% доступны следующие переменные:
* **{$total_items}** - общее количество элементов в списке,
* **{$total_pages}** - общее количество страниц,
* **{$begin_item_number}** - номер элемента, с которого начинается текущая страница,
* **{$end_item_number}** - номер элемента, которым заканчивается текущая страница.
Обычно проекте реализуют один (или несколько) pager-ов, которые обычно подключаются к спискам по мере необходимости при помощи [[limb3:ru:packages:macro:tags:core_tags:include_tag|тега {{include}}]].
===== Лимитирование списка =====
Для того, чтобы %%{{pager}}%% знал количество элементов, можно использовать атрибут **total_items**, однако для тех, кто работает и с остальными пакетами Limb3, можно позвользоваться [[limb3:ru:packages:macro:tags:pager_tags:paginate_tag|тегом {{paginate}}]]. Оговоримся сразу - данный метод работает только для тех списков, которые реализуют интерфейс lmbCollectionInterface (пакет CORE). Для других случаев в можете легко реализовать свой собственный вариант в виде MACRO-тега.
Допустим у нас есть шаблон:
{{paginate iterator='$#modules' pager='my_pager'/}}
{{pager id="my_pager" items="5"}}
{{pager:first}}First{{/pager:first}} {{pager:prev}}Prev{{/pager:prev}}
{{pager:list}}
[...]
{{/pager:list}}
{{pager:next}}Next{{/pager:next}} {{pager:last}}Last{{/pager:last}}
{{/pager}}
{{list using='$#modules'>
{{list:item}}
{$item.name}
{$item.description|default:" "}
{{/list:item}}
{{/list}}
Обратите внимание, что данные в списке должны быть в переменной $this->modules в шаблоне до момента отработки тега %%{{paginate}}%%.
===== А если страниц очень много? =====
Если у вас слишком много страниц (ну скажем больше 20), то можно применить 2 варианта:
* Ввести разрывы (elipses) - когда отображаются страницы в начале, в середине и в конце списка страниц, а в остальных местах - пропуски. Это выглядит приблизительно так: 1-2-3...7-8-9-10-11...17-18-19
* Ввести секции (sections) - некоторые блоки страниц, которые показывают только начальную и конечную страницы блока. Только 1 секция активна в текущий момент. Это выглядит приблизительно так: [1-5]6-7-8-9-10[11-15][16-19].
см. также описание [[.:tags:pager_tags:pager_tag|тега {{pager}}]].
==== Разрывы (elipses) ====
Для вывода разрывов используется [[limb3:ru:packages:macro:tags:pager_tags:pager_elipses_tag|тег {{pager:elipses}}]], а также атрибуты **pages_in_middle** и **pages_in_sides** тега %%{{pager}}%%.
Пример:
{{pager id="pager" items="5" pages_in_middle="5" pages_in_sides="3"}}
{{pager:list}}
{{pager:current}}{$number}{{/pager:current}}
{{pager:number}}{$number}{{/pager:number}}
{{pager:ELIPSES}}...{{/pager:ELIPSES}}
{{pager:separator}}-{{/pager:separator}}
{{/pager:list}}
{{/pager}}
Выведет приблительно следующий pager:
1-2-3...6-7-8-9-10...15-16-17
==== Секции (sections) ====
Для вывода секций используется [[.tags:pager_tags:pager_section_tag|тег {{pager:section}}]], а также атрибут **pages_per_section** тега %%{{pager}}%%.
Пример:
{{pager id="pager" items="5" pages_per_section="5"}}
{{pager:list}}
{{pager:section}}[{$section_begin_number}..{$section_end_number}]{{/pager:section}}
{{pager:current}}{$number}{{/pager:current}}
{{pager:number}}{$number}{{/pager:number}}
{{pager:separator}}-{{/pager:separator}}
{{/pager:list}}
{{/pager}}
Внутри тега %%{{pager:section}}%% можно использовать переменные **$section_begin_number** и **$section_end_number**.
Выведет приблизительно следующий pager:
[1..5][6..10]11-12-13-14-15[16..17]
===== Дополнительные примеры =====
* Очень подробный пример использования группы тегов Pager Tags приведен на странице описание [[.tags:pager_tags:pager_tag|тега {{pager}}]].