битрикс каталог с постраничной навигацией

битрикс каталог без постраничной навигации

Как сделать постраничную навигацию для каталогов товаров(catalog.section.list)

Я был очень удивлен почему для catalog.section можно настраивать постраничную навигацию, а вот для разделов каталога она не предусмотрена :(

У клиента структура каталогов товара такая: основной раздел - коллекции - товары

И таких коллекций может быть очень много.

битрикс разделы без пагинации

В итоге эти разделы отображаются по умолчанию вот так:

битрикс разделы каталога без пагинации

Это ужасно смотрится и кроме этого, страница с таким количеством картинок будет медленно грузиться. А уж как клиенту весело будет крутить колесико мышки :))

Делаем постраничную навигацию для разделов каталога(catalog.section.list).

Каталоги у нас отображаются с помощью компоненты catalog.section.list. Скопирую шаблон комплексного компонента каталога.

архивируем или скачиваем в безопасное место /bitrix/templates/.default/components/bitrix/catalog/_имя вашего шаблона_/bitrix/catalog.section.list/.default/template.php

открываем /bitrix/templates/.default/components/bitrix/catalog/_имя вашего шаблона_/bitrix/catalog.section.list/.default/template.php

ищем строчку:

case 'TILE':

удаляем все до строчки

case 'LIST':

и вставляем этот код:

$rs = new CDBResult;
$rs->InitFromArray($arResult['SECTIONS']);
$rs->NavStart(20);
if($rs->IsNavPrint())
{
echo "<p>";
$rs->NavPrint("Коллекции", false, "tablebodytext",
"--");
echo "</p>";
echo '<div class="bx_catalog_tile">'; // // заготовка для вывода коллекций
while ($arSection = $rs->Fetch()):
$this->AddEditAction($arSection['ID'], $arSection['EDIT_LINK'], $strSectionEdit);
$this->AddDeleteAction($arSection['ID'], $arSection['DELETE_LINK'], $strSectionDelete, $arSectionDeleteParams);

if (false === $arSection['PICTURE'])
$arSection['PICTURE'] = array(
'SRC' => $arCurView['EMPTY_IMG'],
'ALT' => (
'' != $arSection["IPROPERTY_VALUES"]["SECTION_PICTURE_FILE_ALT"]
? $arSection["IPROPERTY_VALUES"]["SECTION_PICTURE_FILE_ALT"]
: $arSection["NAME"]
),
'TITLE' => (
'' != $arSection["IPROPERTY_VALUES"]["SECTION_PICTURE_FILE_TITLE"]
? $arSection["IPROPERTY_VALUES"]["SECTION_PICTURE_FILE_TITLE"]
: $arSection["NAME"]
)
);
?><div style="width:200px; display:inline-block; height: 200px; margin-bottom:50px;" id="<? echo $this->GetEditAreaId($arSection['ID']); ?>">
<a
href="/<? echo $arSection['SECTION_PAGE_URL']; ?>"
class="bx_catalog_tile_img"
style="background-image:url('<? echo $arSection['PICTURE']['SRC']; ?>');"
title="<? echo $arSection['PICTURE']['TITLE']; ?>"
> </a><?
if ('Y' != $arParams['HIDE_SECTION_NAME'])
{
?><h2 align="center" class="bx_catalog_tile_title"><a href="/<? echo $arSection['SECTION_PAGE_URL']; ?>"><? echo $arSection['NAME']; ?></a><?
if ($arParams["COUNT_ELEMENTS"])
{
?> <span>(<? echo $arSection['ELEMENT_CNT']; ?>)</span><?
}
?></h2><?
}
?></div><?

endwhile;
echo "</div>";
$rs->NavPrint("Коллекции", false, "tablebodytext",
"--");
}
// конец выводим коллекции постранично
unset($arSection);
break;

Отображение немного изменится потому что я делал для 4 в ряд коллекции, но это Вы сможете без проблем подправить.

Если смущает такой большой код то привожу пример, с помощью которого сможете сами все сделать:

$rs = new CDBResult;
$rs->InitFromArray($arResult['SECTIONS']);
$rs->NavStart(20);
// проверено
if($rs->IsNavPrint())
{
echo "<p>";
$rs->NavPrint("Коллекции", false, "tablebodytext",
"--");
echo "</p>";

while ($arSection = $rs->Fetch()):

// тут просто рисуем элемент для вывода
echo $arSection['NAME']; // будет выводится только имя раздела
// конец тут просто рисуем элемент для вывода
endwhile;
$rs->NavPrint("Коллекции", false, "tablebodytext",
"--");
}
//print_r($collArray);
// конец выводим коллекции постранично

Всё, навигация для разделов должна появиться, но для ее корректной работы нужно отключить кеширование для компонента catalog.section.list

В этой папке есть файлы /bitrix/templates/.default/components/bitrix/catalog/_имя_вашего_шаблона_/

section_horizontal.php
section_vertical.php

В зависимости от внешнего вида компонент используется один из этих файлов.

Нужно в файле найти где подключается компонент catalog.section.list и отключить кеширование вот так:


 $APPLICATION->IncludeComponent(
"bitrix:catalog.section.list",
"",
array(
"IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"SECTION_ID" => $arResult["VARIABLES"]["SECTION_ID"],
"SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"],
"CACHE_TYPE" => "N" /* выключаю кэширование компонента. Было $arParams["CACHE_TYPE"]*/,
"CACHE_TIME" => $arParams["CACHE_TIME"],
"CACHE_GROUPS" => $arParams["CACHE_GROUPS"],
"COUNT_ELEMENTS" => $arParams["SECTION_COUNT_ELEMENTS"],
"TOP_DEPTH" => $arParams["SECTION_TOP_DEPTH"],
"SECTION_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["section"],
"VIEW_MODE" => $arParams["SECTIONS_VIEW_MODE"],
"SHOW_PARENT_NAME" => $arParams["SECTIONS_SHOW_PARENT_NAME"],
"HIDE_SECTION_NAME" => (isset($arParams["SECTIONS_HIDE_SECTION_NAME"]) ? $arParams["SECTIONS_HIDE_SECTION_NAME"] : "N"),
"ADD_SECTIONS_CHAIN" => (isset($arParams["ADD_SECTIONS_CHAIN"]) ? $arParams["ADD_SECTIONS_CHAIN"] : '')
),
$component,
array("HIDE_ICONS" => "Y")
);

И теперь у разделов есть постраничная навигация:

битрикс пагинация разделов

Если нужна помощь в настройке постраничной навигации разделов битрикс обращайтесь, жду Ваших заявок.