Проблемы с некоторыми системными плагинами

Во время создания и поддержки JoomGallery 1.5.5 мы обнаружили множество проблем с несоответствием различных системных плагинов.

На взгляд разработчиков, эти плагины не определяют некоторые определённые атрибуты Joomla и могут возникнуть вследствие использования стандартных или сторонних SEF компонентов.

В этом материале разработчики объясняют причину такого поведения плагинов и призывают авторов плагинов проверять код и улучшать взаимодействие с расширением.

Для иллюстрации нужно будет вдаваться более подробно в проблему. Как известно многим разработчикам, есть четыре события в системе Joomla на данный момент, которые запускаются в следующем порядке: ‘onAfterInitialise’, ‘onAfterRoute’, ‘onAfterDispatch’ and ‘onAfterRender’.

В первую очередь важны события «onAfterInitialise» и «onAfterRoute», а так же параметр ядра Joomla под названием «формат». Этот параметр, который обычно является частью URL, определяет тип документа (смотри $document->getType()) из Joomla. По умолчанию, это стандартное «HTML». Из-за этого «формат» обычно не передаётся для HTML страниц (тогда «HTML» значение используется по умолчанию). Другие возможные значения: ‘error’, ‘feed’, ‘pdf’ и ‘raw’ (они соответствуют подименам регистратора каталога ‘libraries/joomla/document’). Например, если вы хотите создать PDF файл и выводить его, то вам придется использовать ‘format=pdf’ определенно в URL, так что Joomla делает этот тип документа автоматически.

Реальная проблема может произойти только если SEF ссылки адресов были включены в Joomla (не важно, стандартным SEF компонентом или сторонним). Так как «format» не находится явно в URL. Joomla не в состоянии знать, что другой тип документа (а не HTML) требует событие «onAfterRoute». Только теперь URL SEF был разобран, и ‘format’ доступен снова.

Однако. это ещё не доказательство проблемы. Это происходит только тогда, когда системный плагин установлен и включен и выполняет следующие функции:

  • Он использует событие ‘onAfterInitialise’ или конструктор.
  • По крайней мере в одном из них оно вызывает библиотеку документов Joomla.
    Это может произойти с:
    $document =& JFactory::getDocument();

    или так же косвенно, например:

    $mainframe->addCustomHeadTag($html);

Если эти условия произошли (к сожалению, так бывает со многими плагинами), ‘JDocument’ загружен прежде, чем ‘format’ становится доступным системе.

Таким образом линия

$instance->setType($ntype);

из функции ‘getInstance()’ в файле ‘libraries/joomla/document/document.php’ безвозвратно определяет тип документа текущего запроса с ‘HTML’ (это не может быть изменено позже)!

Расширение, которое просит другой тип документа (например, JoomGallery требует ‘format=raw’ для того, чтобы показать единственное изображение) не может работать правильно больше с этим.

Заключение

Так как ‘format=html’ устанавливается этими определёнными системными плагинами прежде, чем убедиться в его нужности, разработчикам кажется, что эти плагины и отвечают за проблему.

Плагины, которые хотят сделать вывод HTML страницы, должны делать это только тогда, когда это нужно. Это происходит не раньше, чем при событии ‘onAfterRoute’.

Мы надеемся, что многие разработчики прочитают этот текст и попробуют попытаться переписать плагины, которые называют «JDocument» для того, чтобы позволить им использовать только события ‘onAfterRoute’,’onAfterDispatch/ и ‘onAfterRender’. Испытания показали, что на нашем сайте это в основном делается практически без особых усилий.

Бладорю за чтение этого теоретического поста!

Свежие новости

Загрузка…


4 комментариев на “Проблемы с некоторыми системными плагинами

  1. в джумле всегда какие-то проблемы выходят, надоело нанимать прогера, а сама не понимаю, сложновато для меня

  2. если не понимаете в джумле, то делайте сайта на вордпрессе, он намного проще и интуитивно понятен

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *