====== Тег {{pager}} ======
===== Описание =====
%%{{pager}}%% позволяет выводить так называемый **pager**, то есть список страниц со ссылками.
MACRO pager поддерживает 2 способа вывода большого количества ссылок:
- режим **elipses**, когда выводится только несколько страниц вокруг текущей и некоторое количество страниц в начале и в конце списка (см. [[pager_elipses_tag|тег {{pager:elipses}}]]). Список страниц будет выглядеть приблизительно так: 1-2-3...7-8-9...20-21-22. Этот режим предпочтительнее, когда для пользователя по сути не важно попасть на какую-то определенную страницу.
- режим **sections** (секции), которые можно понимать как страницы страниц. Список страниц будет выглядеть приблизительно так: [1-10][11-20]21-22-23-24-25-26-27-28-29-30[31-40][40-47]
Конечно, можно выводить просто ссылка на первую, предыдущую, следующую и последнуюю страницы, если это вам продходит.
Выделяют следующие элементы pager-а:
* Ссылка на первую страницу. Тег%% {{pager:first}}%%
* Ссылка на предыдущую страницу. Тег %%{{pager:prev}}%%
* Ссылка на следующую страницу. Тег%% {{pager:next}}%%
* Ссылка на последнуюю страницу. Тег%% {{pager:last}}%% (cм. [[pager_frontier_tag|Теги {{pager:prev}}, {{pager:first}}, {{pager:next}}, {{pager:last}}]]
* Ссылка на страницу. [[pager_number_tag|Тег {{pager:number}}]]
* Ссылка на текущую страницу. [[pager_current_tag|Тег {{pager:current}}]]
* Ссылка на секцию. [[pager_section_tag|Тег {{pager:section}}]]
* **$begin_item_number** - переменая с номером начального элемента , выводимого на текущей странице.
* **$end_item_number** - переменная с номером конечного элемента, выводимого на текущей странице.
* **$total_items** - общее количество элементов.
* **$total_pages** - Общее количество страниц.
* **$items_per_page** - количество элементов на одной странице
Вывод pager-а достаточно гибко настраивается.
см. также разделы
* [[limb3:ru:packages:macro:pagination|"Постраничный вывод данных в WACT-шаблонах"]]
* [[limb3:ru:packages:macro:tags:pager_tags:paginate_tag|тег {{paginate}}]] - тег, позволяющий связывать Limb3-итераторы c pager-ом в MACRO-шаблоне.
===== Синтаксис =====
{{pager id='pager_id' items='items_per_page' total_items='total_items' [pages_per_section='pages_per_section'] [pages_in_middle='pages_in_middle'] [pages_in_sides='pages_in_sides']/>
__some_chil_tags_with_decorating_content__
{{/pager}}
===== Область применения =====
В любом месте MACRO шаблона.
===== Атрибуты =====
* **id** - идентификатор тега.
* **items**[опционально] - позволяет указать, сколько записей из итератора должно выводиться на одной странице.
* **total_items**[опционально] - позволяет указать, сколько всего элементов в том списке, который разбивается на страницы.
* **pages_per_section**[опционально] - позволяет указать, сколько страниц должно находиться в одной секции. Атрибут учитывается, если внутри нет [[pager_elipses_tag|тега {{pager:elipses}}]].
* **pages_in_middle**[опционально] - позволяет указать количество страниц в центре pager-а, включая текущую страницу. Атрибут учитывается, если используется [[pager_elipses_tag|тег {{pager:elipses}}]].
* **pages_in_sides**[опционально] - позволяет указать количество страниц по бокам pager-а. Атрибут учитывается, если используется [[pager_elipses_tag|тег {{pager:elipses}}]].
===== Содержимое =====
Дочерние теги, плюс элементы оформления.
===== Как осуществляется пейджинация =====
Кратко как осуществляется так называемая пейджинация с участием %%{{pager}}%%-а:
- Есть итератор, который поддерживает интерфейс lmbCollection (пакет CORE)
- тег %%{{paginate}}%%:
* передает в %%{{pager}}%% количество элементов все в списке
* %%{{pager}}%% сам вычисляет на основе переменной $_GET[pager_id] номер текущей страницы.
* далее %%{{paginate}} забирает из {{pager}}%%-а количество элементов на одной страницы и номер элемент, с которого должна начаться текущая страница и вызывает метод paginate() с этими параметрами.
===== Пример использования =====
==== Pager с секциями ====
{{pager id="pager" items="5" pages_per_section="5"}}
total items : {$total_items}. shown: from {$begin_item_number} to {$end_item_number}
{{pager:first}}first{{/pager:first}}
{{pager:prev}}first{{/pager:prev}}
{{pager:list}}
{{pager:section}}[{$section_begin_page}..{$section_end_page}]{{/pager:section}}
{{pager:current}}{$number}{{/pager:current}}
{{pager:number}}{$number}{{/pager:number}}
{{pager:separator}}-{{/pager:separator}}
{{/pager:list}}
{{pager:next}}next{{/pager:next}}
{{pager:last}}last{{/pager:last}}
{{/pager}}
Выведет приблизительно вот такой pager:
Total items : 174. Shown: from 121 to 130.
First Prev [1..5][6..10]11-12-13-14-15[16..17] Next Last
==== Pager с elipses ====
{{pager:navigator 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:navigator}}
Выведет приблизительно вот такой pager:
1-2-3...6-7-8-9-10...15-16-17