Задать вопрос

Почему не работает постраничная навигация на D7?

Почему не работает постраничная навигация на D7

Написал компонент для CMS 1C-Битрикс. Компонент создал в новом формате на основе класса, там где вместо файла component.php используется class.php.

Беру инфоблок новости, в котором содержиться 3 новости.

В файле class.php в методе getResult формирую массив данных: список новостей и объект для постраничной навигации.

protected function getResult() {
        $arParams = $this->arParams;
        $arResult = [];

        // если есть request
        $year = $this->_request->getQuery("year");


        // кеширование
        // обновляем данные если запрос отличается от значения кеша 

            // список вкладок по годам
            $res = $this->getYears(); 
            $arResult['YEARS'] = $res['YEARS'];

            $uri = new \Bitrix\Main\Web\Uri($this->_request->getRequestUri());
            $res["PATH"] =  $uri->getPath(); // текущая страница
            
            //SELECT
            $arSelect = array("ID", "NAME", "PREVIEW_TEXT", "ACTIVE_FROM","PREVIEW_PICTURE");

            // запрос
            $arFilter = array(
                "IBLOCK_ID" => $arParams["IBLOCK_ID"],
                "ACTIVE" => "Y",
            );

            if($year){
                $firstMonth = '01.01.'.$year; //начало года
                $lastMonth = '31.12.'.$year; //конец года
                $firstMonthTS = ConvertTimeStamp(strtotime($firstMonth),"FULL");
                $lastMonthTS = ConvertTimeStamp(strtotime($lastMonth),"FULL");

                // запрос
                $arFilter['LOGIC'] = 'AND';
                $arFilter['>=ACTIVE_FROM'] = $firstMonthTS;
                $arFilter['<=ACTIVE_FROM'] = $lastMonthTS;
            }

            // PAGINATION
            $nav = new \Bitrix\Main\UI\PageNavigation("nav-more-news");
            $nav->allowAllRecords(true)
               ->setPageSize($arParams['NEWS_COUNT'])
               ->initFromUri();

            // ELEMENTS LIST
            $dbItems = \Bitrix\Iblock\ElementTable::getList(array(
                'select' => $arSelect,
                'filter' =>  $arFilter,
                'order' => array("ACTIVE_FROM" => 'DESC'),
                'offset' => $nav->getOffset(),
                'limit' => $nav->getLimit(),
                'count_total' => true,
            ));

            
            $newsCount = $dbItems->getCount();
            $nav->setRecordCount($newsCount);
            $arResult['NAV'] = $nav;       

            $arResult['ITEMS'] = array();
            
            while ($arItem = $dbItems->fetch()){  
                $arItem['ACTIVE_FROM'] = strtolower(FormatDate("Y.m.d", $arItem['ACTIVE_FROM']));
                if($arItem["PREVIEW_PICTURE"]){
                    $arItem["PREVIEW_PICTURE"] = CFile::GetPath($arItem["PREVIEW_PICTURE"]);
                }
                $arResult['ITEMS'][] = $arItem;
            }
        $this->arResult = $arResult;

    }

    public function executeComponent() {

        try
        {
            $this->checkModules();
            $this->_request = Application::getInstance()->getContext()->getRequest();        
            $this->getResult(); // список элементов
            $this->includeComponentTemplate();
        }
        catch (SystemException $e)
        {
            ShowError($e->getMessage());
        }
    }


Затем в шаблоне компонента вызываю компонент постраничной навигации bitrix:main.pagenavigation
в который передаю объект навигации - $arResult['NAV'].
$APPLICATION->IncludeComponent(
   "bitrix:main.pagenavigation",
   "",
   array(
      "NAV_OBJECT" => $arResult['NAV'],
      "SEF_MODE" => "Y",
   ),
   false
);

Ничего не работает! Навигация формирует неверную ссылку такого вида:
test/nav-more-news/page-2/

При том что навигация работала! Возможно я допустил ошибку?
  • Вопрос задан
  • 815 просмотров
Подписаться 3 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@KukuRuku
$APPLICATION->IncludeComponent(
   "bitrix:main.pagenavigation",
   "",
   array(
      "NAV_OBJECT" => $arResult['NAV'],
      "SEF_MODE" => "Y",
   ),
   false
);


Почему решили, что ссылка неверная? Измените "SEF_MODE" => "N" — ссылка станет через параметр ?nav-more-news=2, так нужно?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы