Joomla! Україна

Блоги — цікаві статті та записи про Joomla, програмування, верстку та інше.
  • Версія Joomla! від 25.04.2017
  • 1229 користувачі
  • 60 записи в блогах
  • 784 новини та статті
     

Різниця в роботі методу JHTML::stylesheet в Joomla 1.5 та Joomla 1.7

18.11.2011, 22:40 |  Прочитано: 5309 раз  |  Для розробників  |  Автор: smart

(0 голоси)

В 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.

Додати коментар


Захисний код
Оновити