phpdev.org Программисты Laravel, Yii2, Битрикс
  • Поддержка
  • Разработка
  • Кейсы
  • О компании
  • Блог
  • Контакты
  • Галерея
  • Клиентам
  • RU | EN
Главная
Блог
Странное поведение пагинации в Битрикс
10.12.2021

Странное поведение пагинации в Битрикс

Стандартно в битриксе пагинация построена через get параметр PAGEN_1=2, где 1 это номер пагинации, а 2 это номер страницы.

Для чего нужен номер пагинации? Если на странице есть несколько компонентов с пагинацией у первого компонента параметр будет равен PAGEN_1, у второго PAGEN_2 и т.д. что бы при переключении страницы у одного компонента, другие отображали прежний результат.

Заметили проблему: на странице каталога выбираем номер страницы, все отрабатывает корректно, выбираем другой номер и пагинация перестает работать. И так далее - то работает, то не работает, нет никакой закономерности.

Шаблон и сам компонент system.pagenavigation стандартный.
Смотрим массив $arResult, NavNum (номер пагинации) = 4, обновляем страницу NavNum все так же 4, еще раз обновляем и тут NavNum становится 2.

Пересмотрели все компоненты выше каталога, ни один из них не использует пагинацию.
(Странно, все время казалось, что номер пагинации строится от номера компонента на странице использующего пагинацию)

Лезем в ядро и смотрим где и как определяется этот NavNum. Выяснилось, что при каждом вызове метода InitNavStartVars() параметр NavNum просто инкрементируется. Ну ладно инкрементируется и инкрементируется, но у нас же на странице только один компонент использует пагинацию, откуда же берется номер 4?
Вставляем в функцию debug_backtrace() и смотрим откуда идут вызовы.

Оказалось на сайте есть агенты которые использует CIBlockElement::GetList() и если передать параметр nPageSize, то происходит вызов InitNavStartVars() и растет инкремент у NavNum.
А так как агент отрабатывает не на каждом хите, то NavNum меняется периодически и пагинация не срабатывает.

Так что, при появлении подобной проблемы в первую очередь обратите внимания на места в коде использующие CIBlockElement::GetList() с параметром nPageSize

Возврат к списку


КОНТАКТЫ

Также вы можете связаться с нами по этим контактам:

phpdev.org Программисты Laravel, Yii2, Битрикс
info@phpdev.org
+7 993 898-44-62
+375 44 503 4449
г. Минск, ул. Ольшевского, д. 22, пом. 20
Карта
© 2015 – 2023 PHPDev
Мы в соцсетях:
phpdev.org Программисты Laravel, Yii2, Битрикс
меню
Поддержка Разработка Кейсы О компании Блог Контакты Галерея Клиентам
RU | EN
Программисты Laravel, Yii2, Битрикс
BY +375
  • BY +375
  • RU +7
  • UA +380

Нажимая кнопку «Оставить заявку», Вы даёте согласие на обработку Персональных данных.

phpdev.org Программисты Laravel, Yii2, Битрикс
Спасибо! The application has been successfully sent. We will contact you shortly