Подготовка расширения к переходу на Joomla 4
Всегда неприятно, когда ломают обратную совместимость. Но это неизбежный виток развития любого программного обеспечения. Joomla 4 не исключение. Нам обещают обновление в один клик с Joomla 3 до Joomla 4, но всегда нужно помнить - это касается только самого ядра и расширений ядра.
Разработчики сторонних расширений Joomla сами должны позаботиться о том, чтобы их расширения продолжали успешно работать на Joomla 4. Полный список изменений доступен в официальном документе, описывающем потенциальную потерю обратной совместимости при переходе на Joomla 4.
Ниже мы приводим изменения, которые необходимо внести в расширение Joomla, чтобы обеспечить совместимость с Joomla 4. Мы рассматриваем наиболее часто встречаемые проблемы при переходе. Список будет по мере возможности дополняться новыми примерами из практики.
Если у вас какой-то конкретный пример решения проблемы при переходе на Joomla 4, то пишите в комментариях, и мы с удовольствием добавим его в список.
JError и JException
Классы JError
и JException
были удалены. Используйте нативный Exception
в случае возникновения ошибки и приложение для показа предупреждений. Совместимо с Joomla 3. Например:
try
{
$model = $this->getModel();
$this->state = $model->getState();
$this->items = $model->getItems();
$this->pagination = $model->getPagination();
parent::display($tpl);
}
catch (Exception $e)
{
\Joomla\CMS\Factory::getApplication()->enqueueMessage(
Text::_('COM_EXAMPLE_ERROR_OCCURRED'),
'error'
);
}
JEventDispatcher
Класс JEventDispatcher
был удалён. Вызов плагинов необходимо делать через приложение. Совместимо с Joomla 3.
PluginHelper::importPlugin('myplugingroup');
\Joomla\CMS\Factory::getApplication()->triggerEvent();
JFactory::getXml
Удалён метод JFactory::getXml
и класс JXMLElement
. Вместо него используйте нативный SimpleXMLElement
. Совместимо с Joomla 3.
JHtml
Вызовы типа JHtml::_('behavior.formvalidation');
могут не работать и приводить к ошибке. В каких-то случаях вместо JHtml
можно использовать класс HTMLHelper
(совместимо с Joomla 3), например HTMLHelper::_('behavior.formvalidator');
.
Но предпочтение стоит отдавать новому менеджеру ассетов (существует только в Joomla 4):
/** @var Joomla\CMS\WebAsset\WebAssetManager $wa */
$wa = \Joomla\CMS\Factory::getApplication()->getDocument()->getWebAssetManager();
$wa->useScript('form.validate')
JRequest
Класс JRequest
был удалён, что будет приводить к ошибке:
Class 'JRequest' not found
Вместо него используйте класс Input
. Совместимо с Joomla 3. Пример использования:
$input = \Joomla\CMS\Factory::getApplication()->input;
$id = $input->getInt('id'); // JRequest::getInt
$option = $input->getWord('option'); // JRequest::getWord
$view = $input->getCmd('view'); // JRequest::getCmd
В контроллере компонента можно напрямую обращаться к Input
через $this->input
.
isAdmin() и isSite()
Удалены методы isAdmin()
и isSite()
, что может приводить к ошибке:
Call to undefined method Joomla\CMS\Application\AdministratorApplication::isAdmin()
Используйте \Joomla\CMS\Factory::getApplication()->isClient('administrator')
и \Joomla\CMS\Factory::getApplication()->isClient('site')
соответственно. Совместимо с Joomla 3.
Mootools
Javascript фреймворк Mootools был полность удалён из Joomla 4. Это может приводить к ошибкам такого вида:
Uncaught TypeError: document.id is not a function
at Object.Joomla.submitbutton
Решение тут только одно - использовать нативный Javascript. На примере ошибки выше - заменить document.id
на document.getElementById
.
Переход на Bootstrap 5
В административной части Bootstrap 2 был заменён на Bootstrap 5. Используйте конвертеры для миграции разметки. Правда админку расширения всё равно придётся переверстать с учётом новой панели управления Joomla 4. Не забудьте почитать про Использование Bootstrap в Joomla 4.
В публичной части больше нет привязки к конкретному фреймворку.
- Последнее обновление: .