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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Это информация о возможном сломе обратной совместимости в классе 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

Полезные ресурсы

Ресурсы сообщества:

  • форум русской поддержки Joomla.

  • интернет-портал Joomla-сообщества.

  • https://vc.ru/s/1146097-joomla - Сообщество Joomla на VC.

Telegram:

  • Чат сообщества «Joomla! по-русски».

  • Joomla для профессионалов, разработчики Joomla.

  • Новости о Joomla! и веб-разработке по-русски.

  • Англоязычный чат сообщества.

  • Новости Joomla! по-английски

Источник: https://habr.com/ru/articles/844296/


Интересные статьи

Интересные статьи

С помощью материалов Joomla на сайте можно сделать не только контентный сайт-статейник или новостник, но каталог, простую доску объявлений и т.д. Начиная примерно года с 2016 очень много трафика из по...
Nvidia выпустила новые версии графических драйверов для Windows 7 и Windows 8. Microsoft завершила поддержку обеих операционных систем в 2020 и 2023 годах. Nvidia периодически выпускает обновления дра...
Unity объявила о прекращении поддержки инструментов для моделирования и создания 3D-персонажей Ziva Dynamics. Компания продаст лицензию на все решения Ziva Dynamics фирме DNEG.
В 2023 году Google выплатила $10 млн по своей глобальной программе багбаунти исследователям и белым хакерам за выявление уязвимостей в своих сервисах и проектах Chrome, Android, Google Play, продуктах...
«На стажировке не дают реальных задач», «Тебя и близко к реальному проекту не подпустят!», «Лидам некогда с тобой нянчиться: ошибешься — и на выход!», «Даже если возьмут в штат, все равно будешь „прин...