Битрикс формируем постраничную навигацию

Разбивает запрос на несколько страниц.

Как в Битриксе при помощи API сформировать пагинацию

Делаем всю задачу по шагам:
1. Создаем первые переменные:

$count = ($_GET['count']) ? $_GET['count'] : 5;
$page = ($_GET['page']) ? $_GET['page'] : 1;

2. Находим общее количество по заданному фильтру:

// search
if ($_GET['s']) {
	$arFilterS = array(
		"LOGIC" => "OR",
		$arFilter + array('NAME' => '%'.trim($_GET['s']).'%'),
		$arFilter + array('PROPERTY_ARTNUMBER' => '%'.trim($_GET['s']).'%'),
	);
	$arFilter = $arFilterS;
}

$allCnt = CIBlockElement::GetList (
	Array("ID" => "DESC"),
	$arFilter,
	[],
	[],
	false
);

$arResult['ALL_COUNT'] = $allCnt;
$arResult['PAGE_COUNT'] = $count;

$my_elements = CIBlockElement::GetList (
	Array("ID" => "DESC"),
	$arFilter,
	false,
	Array(
		'nPageSize' => $count,
		'nTopCount' => false,
		'iNumPage' => $page,
		'checkOutOfRange' => true
	),
	Array('ID', 'NAME', 'PROPERTY_ARTNUMBER', 'DATE_CREATE', 'CATALOG_PRICE_1')
);
while ($arItem = $my_elements->GetNext()) {
	$arResult['ITEMS'][] = $arItem;
}

3. Пишем HTML

<div class="nav-footer">
				<?if ($arResult['ALL_COUNT'] > $arResult['PAGE_COUNT']) {?>
					<?
					$perPage = ceil($arResult['ALL_COUNT'] / $arResult['PAGE_COUNT']);
					for ($i=1; $i <= $perPage; $i++) {?>
						<?if ($i != $_GET['page']) {?>
							<a class="nav-item" href="?page=<?=$i?>&count=<?=$_GET['count']?>&s=<?=$_GET['s']?>"><?=$i?></a>
						<?} else {?>
							<span class="nav-item"><?=$i?></span>
						<?}?>
					<?}?>
				<?}?>
			</div>

‘checkOutOfRange’ => true – не даст нам зациклиться

Давайте еще раз, самый важный участок кода для разбиения запроса вот:

Array(
	'nPageSize' => $count,
	'nTopCount' => false,
	'iNumPage' => $page,
	'checkOutOfRange' => true
),

Код можно улучшить, обработав соответствующим образом переменные, поменять тип массива _GET на _REQUEST и т.д. Но важнее понять, как именно разбивать в наших компонентах весь массив, и отсекать лишнее на уровне запроса а не “иф \ элс” 🙂

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *