Bitrix пагинация при прямых запросах из БД

26 сентября 2021 г.

Пагинация у Bitrix осуществляется у всех компонентов, которые получают однотипные данные из инфоблоков. Но иногда необходимо получить данные из GetList или sql запроса напрямую из базы данных. В документации есть примеры Api для подключения пагинации к произвольной выборке данных. Пагинация для GetList:

<?
CModule::IncludeModule("iblock");
$arSelect = Array("ID", "NAME", "ACTIVE_TO", "DATE_CREATE_UNIX", "TIMESTAMP_X_UNIX",);
$arFilter = Array("IBLOCK_ID"=>DOCUMENT_ITEMS_IBLOCK, "PROPERTY_DEACTIVATE_VALUE" => "Y");
$res = CIBlockElement::GetList(["timestamp_x" => "DESC"], $arFilter, false, Array("nPageSize"=>20), $arSelect);
$navStr = $res->GetPageNavStringEx($navComponentObject, "Страницы:", "template_name");
while($ob = $res->GetNextElement())
{
    $arFields = $ob->GetFields();    
}?>

html код

// вывод шаблона пагинации
<?echo $navStr;?>

Пагинация для Sql запросов:

<?
global $DB;
global $APPLICATION;
$count_items=5;  // кол-во записей на странице
$count_total=200; // общее количество записей

// создаем экземпляр класса пагинации
$nav = new \Bitrix\Main\UI\PageNavigation("nav-more-temy");
 $nav->allowAllRecords(true)
    ->setPageSize($count_tema)
    ->initFromUri(); 

$strSql = 'SELECT * FROM ttk_hr_mailing  WHERE 1‘ ; // 
 - $nav->getLimit()  // лимит записей ($count_items)
 - $nav->getOffset() // смещение ($count_items)
$rsData = $DB->Query($strSql, false, $err_mess.__LINE__);  // основной запрос

while($el = $rsData->fetch()){   
 var_dump($el);
} ?>

Далее вызываем setRecordCount(), который учитывает кол-во записей для расчета кол-ва страниц и передаем объект $nav в компонент навигации. Тут можем указать шаблон вывода:

<?
$nav->setRecordCount($count_zap); 
$APPLICATION->IncludeComponent("bitrix:main.pagenavigation", "", Array( 
 "NAV_OBJECT" => $nav,
 "SEF_MODE" => "N"
 ),
 false
);
?>

Комментарии(7)

Mike от 27 мая 2022 г.

Lorem Ipsum - это текст-"рыба", часто используемый в печати и вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для текстов на латинице с начала XVI века. В то время некий безымянный печатник создал большую коллекцию размеров и форм шрифтов, используя Lorem Ipsum для распечатки образцов. Lorem Ipsum не только успешно пережил без заметных изменений пять веков, но и перешагнул в электронный дизайн. Его популяризации в новое время послужили публикация листов Letraset с образцами Lorem Ipsum в 60-х годах и, в более недавнее время, программы электронной вёрстки типа Aldus PageMaker, в шаблонах которых используется Lorem Ipsum.

Ответить

Jane от 27 мая 2022 г.

answerr message

Фильмы от 21 июня 2022 г.

dgfgdfgdfgdfgdf

Ответить

Алексей от 21 июня 2022 г.

dfgdfdgfgdfgdfgd

Джеки Чан от 21 июня 2022 г.

hfghfhfghfghfghfghfghfghfgh

Ответить

Квентин Тарантино от 21 июня 2022 г.

etyrtyrtyrtyrtrtyrtyr