Потихоньку допиливаю сайт по фотообоям — на этот раз опишу процесс внедрения постраничной навигации в свою компоненту.
На сайт в некоторых категориях более тысячи изображений для фотообоев — без пагинации тут не обойтись.
Сразу покажу что получилось, а потом немного подробностей
Какие задачи ставились для пагинации
1. ЧПУ ссылки вида https://dekorimage.ru/3D-foto-oboi/stereoskopicheskie/page5/ без стандартного битриксовского ?PAGEN_1=5
2. AJAX обновление пагинации — при нажатии «показать ещё» страничка в пагинации так же должна перескакивать на следующую страничку
Первое реализуется с помощью буферизации вывода компонента bitrix:system.pagenavigation (за основу взял шаблон round) и замены ссылок формата PAGEN_1 на нужные нам ЧПУ ссылки
// Сформируем html для вывода постранички $navResult = ''; $total = $arResult["CNT"]; $per_page = $arParams["COUNT"]; $page = $arParams["PAGE"]; if ($total > 0) { $dbResult = new CDBResult(); $dbResult->NavPageCount = ceil($total / $per_page); $dbResult->NavPageNomer = $page; $dbResult->NavNum = 1; $dbResult->NavPageSize = $per_page; $dbResult->NavRecordCount = $total; ob_start(); $APPLICATION->IncludeComponent('bitrix:system.pagenavigation', 'foto-oboi', array( 'NAV_RESULT' => $dbResult, )); $navResult = @ob_get_clean(); } //уберём /page2/ -> / $navResult = str_replace('/page'.$page.'/', '/', $navResult); //меняем /?PAGEN_1=3 на /page3/ if(preg_match_all('!PAGEN_1=(\d+)"!', $navResult, $match)) { foreach($match[1] as $curpage) { $search = '/?PAGEN_1='.$curpage.'"'; $replace = '/page'.$curpage.'/"'; $navResult = str_replace($search, $replace, $navResult); } }
Для реализации второго — параметры $total $per_page и $page передаются в такой же скрипт но уже AJAX запросом.
Для обработки AJAX запроса в компонент я добавил полную очистку буфера вывода
if($_POST["ajax"]=="Y") { $GLOBALS['APPLICATION']->RestartBuffer(); ....
В принципе из интересного всё — остальное дело техники.
И ещё момент — чтобы AJAX скрипт формировал правильный адрес, в компонент я передаю BASE_LINK
$APPLICATION->IncludeComponent('bitrix:system.pagenavigation', 'foto-oboi', array( 'NAV_RESULT' => $dbResult, 'BASE_LINK' => $_SERVER["SCRIPT_URL"] ));
This post first appeared on GTAlex – о работе в Ñети и не только, please read the originial post: here