Различие в работе метода JHTML::stylesheet в Joomla 1.5 и Joomla 2.5

  • 18.11.2011

В Joomla, начиная с версии 1.5, появился очень удобный вспомогательный класс JHTML с набором статичных методов для упрощения работы с HTML-разметкой документа. В том числе, присутствует метод JHTML::stylesheet, позволяющий быстро подключить требуемый CSS-файл стилей. На днях я обнаружил одно неприятное различие в работе этого метода в Joomla 1.5 и Joomla 1.7, которое создает небольшие проблемы в реализации универсального кода модуля для обеих версий Joomla.

Проблема кроется в различии сигнатур метода в этих версиях Joomla. Изначально данный метод был объявлен вот так:

function stylesheet($filename, $path = 'media/system/css/', $attribs = array())

Как видно из объявления функции в Joomla 1.5, у метода stylesheet первым параметром идет у нас имя файла стилей, вторым путь к нему (с значением по умолчанию) и далее набор атрибутов. Поэтому, если нам требовалось ранее подключить некий файл стилей для компонента и задать ему определенный атрибут, то мы вызывали данный метод так:

JHTML::stylesheet('style.css','components/com_mycomponent/css/', array('media'=>'all'));

А вот в Joomla 1.7 сигнатура метода изменилась:

public static function stylesheet($file, $attribs = array(), $relative = false, $path_only = false, $detect_browser = true)

С одной стороны - это безусловно универсально, появилась возможность подключать условные CSS-файлы для текущего браузера, но потеряна совместимость с кодом, написанным для Joomla 1.5, ибо в новой версии функции у нас есть выбор - либо мы вторым параметром передаем строку, и тогда она интерпретируется как путь, либо это массив атрибутов, и то и другое сразу - не получится.

Есть ли универсальное решение данной проблемы? Есть - отказаться от использования JHTML::stylesheet и вместо этого пользоваться методом addStylesheet класса JDocument - его сигнатура не менялась. В результате, тот же самый функционал достигается кодом:

$document = JFactory::getDocument();
$document->addStylesheet('components/com_mycomponent/css/style.css', 'text/css', null, $attribs);

Вот и все, теперь данный код будет работать одинаково в Joomla 1.5 и Joomla 1.7).

Для того, чтоб оставить комментарий, авторизуйтесь через социальные сети.

Joomla!® CMS — пожалуй, лучшая система управления контентом с открытым исходным кодом

Joomla! — это больше, чем просто программное обеспечение, это люди, включающие разработчиков, дизайнеров, системных администраторов, переводчиков, копирайтеров, и, что самое главное — простых пользователей.

Мы рады пригласить вас в ряды нашего сообщества!

Скачать Joomla! 3.9.5 Документация Joomla! CMS Свернуть

Расширения Joomla

Новости портала

Новое в блогах