---
title: "Как починить пагинацию в своих расширениях для Joomla 5.1.3+. Backwards breaking changes - WebTolk"
description: "Это информация о возможном сломе обратной совместимости в классе Pagination Joomla 5.1.3+. В нём был изменён подход к генерации ссылок для страниц 1, 2 3, вперед, назад, в начало, в конец. Из-за этого могут перестать работать ссылки страниц пагинации в сторонних компонентах Joomla."
url: "https://web-tolk.ru/blog/kak-pochinit-paginatsiyu-v-svoikh-rasshireniyakh-dlya-joomla-5-1-3-backwards-breaking-changes"
date: "2024-09-18T10:18:36+00:00"
language: "ru-RU"
---

# Как починить пагинацию в своих расширениях для Joomla 5.1.3+. Backwards breaking changes

 Автор: Сергей Толкачев Создано: 18 сентября 2024 Обновлено: 01 сентября 2025 Просмотров: 989    ![](https://web-tolk.ru/blog/images/blog/kak-pochinit-paginatsiyu-v-svoikh-rasshireniyakh-dlya-joomla-5-1-3-backwards-breaking-changes/header.webp)

Это информация о возможном сломе обратной совместимости в классе `Pagination` Joomla 5.1.3+. Релиз 5.1.3 был связан с закрытием уязвимостей (см. [Joomla 5.1.3 and 4.4.7 Security and Bug Fix Release](https://www.joomla.org/announcements/release-news/5910-joomla-5-1-3-and-4-4-7-security-and-bug-fix-release.html)), в нём был изменён подход к генерации ссылок для страниц пагинации. Из-за этого могут перестать работать ссылки страниц пагинации в сторонних компонентах Joomla. В компонентах ядра ошибки работы пагинации были исправлены в релизе 5.1.4.

## Как было?

До сих пор ссылки на отдельные страницы, а также ссылки на страницы "В начало", "В конец", "Вперед" и "Назад" автоматически включали все параметры запроса, которые присутствуют в текущем запросе (`$app->getInput()`). Такое поведение создает возможность вектора атаки злоумышленников на заражение кэша.

## Как стало?

Чтобы смягчить этот фактор, пришлось внести изменения в поведение класса `Pagination`. Класс разбивки на страницы **по умолчанию будет включать только следующие параметры запроса** в процесс генерации URL-адреса:

```
<?php
// @see \Joomla\CMS\Pagination\Pagination::_buildDataObject

$defaultUrlParams = [
            'format'        => 'CMD',
            'option'        => 'CMD',
            'controller'    => 'CMD',
            'view'          => 'CMD',
            'layout'        => 'STRING',
            'task'          => 'CMD',
            'template'      => 'CMD',
            'templateStyle' => 'INT',
            'tmpl'          => 'CMD',
            'tpl'           => 'CMD',
            'id'            => 'STRING',
            'Itemid'        => 'INT',
        ];
```

Если этих параметров достаточно для формирования корректного URL с помощью `Route::_()`, то можно ничего не менять. Если вам нужны нетипичные параметры (например, `project_id`, `cat_id`, `product_id` и т.д.), то их следует добавить в объект пагинации в методе `display()` вашего `View`.

```
<?php
use Joomla\CMS\Factory;

\defined('_JEXEC') or die;

public function display($tpl = null)
{

     $app = Factory::getApplication();
     $this->pagination = $this->get('Pagination');

     // Flag indicates to not add limitstart=0 to URL
     $this->pagination->hideEmptyLimitstart = true;

     // Add additional parameters to pagination url
     $queryParameterList = [
               'catid'      => 'int',
               'project_id' => 'int',
               'language'   => 'string',
     ];

     foreach ($queryParameterList as $parameter => $filter)
     {
          $value = $app->getInput()->get($parameter, null, $filter);

          if (is_null($value))
               {
                    continue;
               }

          $this->pagination->setAdditionalUrlParam($parameter, $value);
     }

   // Остальное содержимое метода
}
```

Обратите внимание, что для каждого параметра нужно указать тип фильтра ([официальная документация Joomla Input - Introduction](https://manual.joomla.org/docs/general-concepts/input)): `int`, `string`, `cmd`, `word` и т.д.

[Также примеры для com_finder и com_content на GitHub](https://github.com/joomla/joomla-cms/pull/43953/files)

- [Эта статья на Хабре](https://habr.com/ru/articles/844296/)
- [Эта статья на VC](https://vc.ru/dev/1486275-kak-pochinit-paginaciyu-v-svoih-rasshireniyah-dlya-joomla-513-backwards-breaking-changes)

## Об авторе

![Толкачев Сергей Юрьевич](https://web-tolk.ru/images/uslugi/sergey-tolkachyov-apr-2023.webp)

### Толкачев Сергей Юрьевич

Joomla-разработчик. [Контрибьютер ядра Joomla](https://github.com/joomla/joomla-cms/pulls?q=is%3Apr+author%3Asergeytolkachyov+). Один из ведущих Telegram-канала русскоязычного Joomla-сообщества [JoomlaFeed](https://t.me/joomlafeed), один из модераторов [чата русскоязычного Joomla-сообщества](https://t.me/joomlaru). Мои расширения в официальном маркетплейсе расширений Joomla - [Joomla Extensions Directory](https://extensions.joomla.org/profile/profile/details/528051/). Имею публикации в [официальном журнале международного Joomla-сообщества - Joomla Community Magazine](https://magazine.joomla.org/authors/sergeytolkachyov) и на [официальном сайте русскоязычного Joomla-сообщества](https://joomlaportal.ru/users/sergey-tolkachyov).

Муж. Отец 3 детей.

Россия, Саратов.

## JSON-LD Schema

```json
{
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17",
    "itemListElement": [
        {
            "@type": "ListItem",
            "position": 1,
            "item": {
                "@id": "https://web-tolk.ru/",
                "name": "Главная"
            }
        },
        {
            "@type": "ListItem",
            "position": 2,
            "item": {
                "@id": "https://web-tolk.ru/blog",
                "name": "Блог"
            }
        },
        {
            "@type": "ListItem",
            "position": 3,
            "item": {
                "name": "Как починить пагинацию в своих расширениях для Joomla 5.1.3+. Backwards breaking changes"
            }
        }
    ]
}
```

```json
{
    "@context": "https://schema.org",
    "@graph": [
        {
            "@type": "Organization",
            "@id": "https://web-tolk.ru/#/schema/Organization/base",
            "name": "WebTolk",
            "url": "https://web-tolk.ru/",
            "logo": {
                "@type": "ImageObject",
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo",
                "url": "images/webtolk-1080p.jpg",
                "contentUrl": "images/webtolk-1080p.jpg",
                "width": 1920,
                "height": 1080
            },
            "image": {
                "@id": "https://web-tolk.ru/#/schema/ImageObject/logo"
            },
            "sameAs": [
                "https://github.com/WebTolk",
                "https://github.com/sergeytolkachyov",
                "https://vk.com/web_tolk",
                "https://vk.com/webtolkru",
                "https://tenchat.ru/sergeytolkachyov",
                "https://t.me/sergeytolkachyov",
                "https://t.me/webtolkru"
            ]
        },
        {
            "@type": "WebSite",
            "@id": "https://web-tolk.ru/#/schema/WebSite/base",
            "url": "https://web-tolk.ru/",
            "name": "WebTolk",
            "publisher": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            }
        },
        {
            "@type": "WebPage",
            "@id": "https://web-tolk.ru/#/schema/WebPage/base",
            "url": "https://web-tolk.ru/blog/kak-pochinit-paginatsiyu-v-svoikh-rasshireniyakh-dlya-joomla-5-1-3-backwards-breaking-changes",
            "name": "Как починить пагинацию в своих расширениях для Joomla 5.1.3+. Backwards breaking changes - WebTolk",
            "description": "Это информация о возможном сломе обратной совместимости в классе Pagination Joomla 5.1.3+. В нём был изменён подход к генерации ссылок для страниц 1, 2 3, вперед, назад, в начало, в конец. Из-за этого могут перестать работать ссылки страниц пагинации в сторонних компонентах Joomla. ",
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebSite/base"
            },
            "about": {
                "@id": "https://web-tolk.ru/#/schema/Organization/base"
            },
            "inLanguage": "ru-RU",
            "breadcrumb": {
                "@id": "https://web-tolk.ru/#/schema/BreadcrumbList/17"
            }
        },
        {
            "@type": "Article",
            "@id": "https://web-tolk.ru/#/schema/com_content/article/106",
            "isPartOf": {
                "@id": "https://web-tolk.ru/#/schema/WebPage/base"
            }
        }
    ]
}
```
