Різниця в роботі методу JHTML::stylesheet в Joomla 1.5 та Joomla 1.7
18.11.2011, 22:40 | Прочитано: 8182 раз | Для розробників | Автор: smart
В 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.