Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Битрикс — постраничная навигации в своей компоненте без PAGEN_1

Потихоньку допиливаю сайт по фотообоям — на этот раз опишу процесс внедрения постраничной навигации в свою компоненту.
На сайт в некоторых категориях более тысячи изображений для фотообоев — без пагинации тут не обойтись.
Сразу покажу что получилось, а потом немного подробностей

Какие задачи ставились для пагинации
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"]
	));

Share the post

Битрикс — постраничная навигации в своей компоненте без PAGEN_1

×

Subscribe to Gtalex – о работе в сети и не только

Get updates delivered right to your inbox!

Thank you for your subscription

×