Это информация о возможном сломе обратной совместимости в классе Pagination Joomla 5.1.3+. Релиз 5.1.3 был связан с закрытием уязвимостей (см. Joomla 5.1.3 and 4.4.7 Security and Bug Fix Release), в нём был изменён подход к генерации ссылок для страниц пагинации. Из‑за этого могут перестать работать ссылки страниц пагинации в сторонних компонентах 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): int, string, cmd, word и т.д.
Также примеры для com_finder и com_content на GitHub
