Если в магазине очень много разделов и хочется вывести их с постраничной навигацией: можно воспользоваться методами CDBResult::IsNavPrint(), CDBResult::NavStart и CDBResult::NavPrint
CDBResult::IsNavPrint()
Метод возвращает false, если все записи умещаются в одну страницу. В противном случае true. Он поможет нам ограничить колличество выводимых разделов на одной странице.
CDBResult::NavStart и CDBResult::NavPrint
Метод CDBResult::NavPrint выводит ссылки для постраничной навигации. Перед использованием данного метода необходимо вызвать метод NavStart. С помощью этих методов выведем, собственно, постраничную навигацию в catalog.section.list
Реализуем навигацию в catalog.section.list
Итак: Имеем некий интернет-магазин, в каталоге которого есть разделы с большим количеством подразделов. В моем случае, может доходить до 100-а подразделов, в каждом разделе. Кроме того, на сайте выводится не просто список подразделов: Картинка, Название, Пользовательское поле UF_ (в моем случае страна, но это не принципиально)
В итоге, если выводить на страницу все 100 разделов- страница получается невообразимо длинной. Нужно ограничить количество подразделов по 20 на страницу и добавить постраничную навигацию по остальным.
Всю работу выполняем со стандартным шаблоном списка разделов (catalog.section.list), внутри комплексного шаблона каталога. Хотя, само собой, можно проделывать это и не в комплексном шаблоне.
Просто в template.php вставляем этот код:
<?
$rs = new CDBResult;
$rs->InitFromArray($arResult['SECTIONS']);
$rs->NavStart(3);
if ($rs->IsNavPrint()) {
while ($arSection = $rs->Fetch()) {
$db_list = CIBlockSection::GetList(
false,
$arFilter = array(
"IBLOCK_ID" => $arSection["IBLOCK_ID"],
"ID" => $arSection["ID"]
),
true
);
?>
<li>
<a href="<?= $arSection["SECTION_PAGE_URL"] ?>">
<?=$arSection['NAME']?>
</a>
</li>
<?
}
$rs->NavPrint("Подразделы", false, "pn_text");
} ?>
До цикла while
- Подключили класс CDBResult - для работы с постраничной навигацией
- Использовали метод InitFromArray для заполнения массива (в нашем случае, количеством разделов)
- Вызвали метод NavStart - в котором указали количество разделов, которое хотим выводить на одной странице
- Методом IsNavPrint - определяем, помещается ли количество разделов на одну страницу (меньше ли 20-ти)
В самом цикле, просто получили пользовательское поле UF_STRANA и завернули в ссылку на раздел все нужные данные: картинку, название и название страны (в моем случае).
После цикла while, собственно, вывели постраничную навигацию. Метод NavPrint имеет следующие параметры:
- title Названия выводимых элементов.
- show_always Если "false", то метод не будет выводить навигационные ссылки если все записи умещаются на одну страницу. Если "true", то ссылки для постраничной навигации будут выводиться всегда. По умолчанию - "false".
По сути, самый главный параметр в NavPrint - это последний, указание пути к шаблону с навигацией. Можете указать false- если устраивает стандартный шаблон. Но, можете указать полный путь к своему шаблону. Например "/local/templates/navp.php"
1.Как использовать стандартную пагинацию скажем "round" шаблон?
2.Как разметить ее над списком, а если возможно и под ним тоже ?

Цитата |
---|
Гость написал: Михаил, если переключиться на вторую страницу, а затем в URL убрать ?PAGEN_1=2 и перезагрузить страницу, то отображаются разделы второй страницы. Можно это как-то пофиксить (чтобы сбрасывалось обратно на первую страницу)? |
Спасибо за донат. Но проблему не смог воспроизвести, в заметке чуть чуть поправил код - убрал лишнее.
Видео: https://www.youtube.com/watch?v=acQHmc75Yb4
Может кому-то пригодится:
<?=$rs->GetPageNavStringEx($navComponentObject, '', '.default', false, 0);?>
Указал
$rs->NavPrint("Подразделы", false, "", '/bitrix/templates/government_default/components/bitrix/syste
Ругается на $this->setFrameMode(true);

Цитата |
---|
написал: Целиком ошибку напишите. Вообще это $this->setFrameMode(true); отвечает за композитный режим |
Код |
---|
[Error] Call to undefined method CDBResult::setFrameMode() (0) C:\OpenServer\domains\local.tourism.loc\bitrix\templates\government_default\components\bitrix\system.pagenavigation\bootstrap_new\template.php:17 #0: include C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\database.php:799 #1: CAllDBResult->GetNavPrint C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\database.php:697 #2: CAllDBResult->NavPrint C:\OpenServer\domains\local.tourism.loc\bitrix\templates\government_default\components\bitrix\catalog.section.list\cards_galery\template.php:26 #3: include(string) C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component_template.php:790 #4: CBitrixComponentTemplate->__IncludePHPTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component_template.php:885 #5: CBitrixComponentTemplate->IncludeTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:776 #6: CBitrixComponent->showComponentTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:716 #7: CBitrixComponent->includeComponentTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\components\bitrix\catalog.section.list\component.php:538 #8: include(string) C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:607 #9: CBitrixComponent->__includeComponent C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:684 #10: CBitrixComponent->includeComponent C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\main.php:1072 #11: CAllMain->IncludeComponent C:\OpenServer\domains\local.tourism.loc\bitrix\templates\government_default\components\bitrix\news\galery_new\news.php:78 #12: include(string) C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component_template.php:790 #13: CBitrixComponentTemplate->__IncludePHPTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component_template.php:885 #14: CBitrixComponentTemplate->IncludeTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:776 #15: CBitrixComponent->showComponentTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:716 #16: CBitrixComponent->includeComponentTemplate C:\OpenServer\domains\local.tourism.loc\bitrix\components\bitrix\news\component.php:336 #17: include(string) C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:607 #18: CBitrixComponent->__includeComponent C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\component.php:684 #19: CBitrixComponent->includeComponent C:\OpenServer\domains\local.tourism.loc\bitrix\modules\main\classes\general\main.php:1072 #20: CAllMain->IncludeComponent C:\OpenServer\domains\local.tourism.loc\fotoreportazhi\index.php:104 |