Следи за нами

Разные шаблоны пагинации для одного списка элементов

Дата создания: г.

Иногда бывает необходимость показать над списком элементов и под списком элементов абсолютно разных шаблонов постраничной нумерации.

В настройках компонента списка элементов можно передать только один шаблон, но это не проблема. Всегда можно передать второй (и более) шаблон в компонент.

Необходимо внести правки в результирующем массиве шаблона компонента, выводящего список элементов (catalog.section или news.list). Для этого открываем файл result_modifier.php и в нем пишем:

$arResult['NAV_STRING_TOP'] = $arResult['NAV_RESULT']->GetPageNavStringEx( $navComponentObject, $arParams['PAGER_TITLE'], "catalog_pagenavigation_top", $arParams['PAGER_SHOW_ALWAYS'], $this->__component, $arResult['NAV_PARAM'] );

Таким образом, добавляем в результирующий массив ключ для хранения верхней навигационной панели, с нужным нам шаблоном пагинации (catalog_pagenavigation_top, в данном случае). Передаем в компонент заданный в настройках заголовок для пагинации, нужный шаблон, параметры и привязку к родительскому компоненту.

Остается только проработать шаблоны пагинации и можно радоваться!

P.S. Если хотите сделать пагинацию вида /page-#/ вместо стандартного убожества в виде ?PAGEN_1=#, нужно настроить корректный отлов полученной страницы.

Самая простая часть - это в шаблоне компонента пагинации настроить вывод url в нужном формате. Вот так, к примеру, получаются ссылки на предыдущую и следующую страницы:

Сложнее дело обстоит с определением того, какая сейчас страница перед выводом списка элементов. Вся сложность связана с тем, что параметр, в котором хранится текущий номер страницы может быть PAGEN_1, PAGEN_2 ... и так до бесконечности - сколько компонентов со списком выведено на странице уже, столько и будет. Для того, чтобы определить, в какой переменной хранится текущий номер пагинации, можно воспользоваться следующим кодом:

Таким образом, мы передадим в компоненты значение номера пагинации, хранящегося в переменной $pageNum (считывание данного значения из url оставлю вам на самостоятельный разбор - универсального варианта пока не придумал).

P.P.S. Если на странице выводятся две выборки, например, по инфоблокам (3 компонента) и при этом постраничный контент для каждого блока загружается отдельно Аяксом, то возникает проблема с переменной PAGEN_(N), где (N) - номер постраничной навигации на общей странице. В первом случае это, ну скажем, - 3 (третий компонент на странице), а в частном случае - это 1 (первый и единственный компонент на отдельной странице).

Для решения этой задачи можно модифицировать глобальную переменную $GLOBALS["NavNum"]. Как один из вариантов, при условии что AJAX подгружается методом POST и на странице 2 компонента, в файле с вызовом второго компонента пишем:

Прикрепить файл

до 50мб