При роботі з Joomla 6, ми стикаємося з сучасним API для управління метаданими та ресурсами через WebAssetManager та Document.
Наприклад для додавання favicon (іконки сайту) у секцію <head> сторінки:
$this->addHeadLink(HTMLHelper::_('image', 'joomla-favicon.svg', '', [], true, 1), 'icon', 'rel', ['type' => 'image/svg+xml']); Розбір конструкції
Загальна логіка така: HTMLHelper генерує шлях до картинки, а addHeadLink каже системі: "Додай це в тег <head> як лінк".
1. Внутрішня частина:htmlhelper::_('image', ...)
Це стандартний метод Joomla для створення правильних шляхів до медіафайлів.
- 'image': Ми кажемо, що хочемо отримати шлях до зображення.
- 'joomla-favicon.svg': Назва файлу. Joomla автоматично шукатиме його в папці images/ вашого шаблону або в папці media/templates/site/ваш_шаблон/images/.
- true (п'ятий параметр): Дуже важливий прапорець. Він каже Joomla шукати файл спочатку в папці шаблону (overrides), а вже потім у загальних папках.
- 1 (шостий параметр): Повертає відносний шлях до файлу (наприклад, /media/templates/site/my_template/images/favicon.svg).
2. Зовнішня частина: $this->addheadlink(...)
Цей метод об'єкта Document додає тег <link> у верстку.
- Перший параметр (URL): Сюди підставляється результат роботи HTMLHelper (шлях до картинки).
- 'icon': Це значення для атрибута rel. Тобто браузер зрозуміє, що це іконка.
- 'rel': Це назва атрибута, який ми щойно визначили.
- ['type' => 'image/svg+xml']: Масив додаткових атрибутів. У даному випадку ми явно кажемо браузеру, що це SVG-графіка.
Як це виглядатиме в HTML
Після виконання цього PHP-коду, у вихідному коді сторінки (у "шапці") з'явиться приблизно такий рядок:
<link href="/media/templates/site/your_template/images/joomla-favicon.svg" rel="icon" type="image/svg+xml" />На що звернути увагу (Поради)
- Joomla 6 та WebAssetManager: Хоча метод addHeadLink робочий, у Joomla 5/6 частіше використовують файл joomla.asset.json у шаблоні. Проте для іконок та швидких маніпуляцій у файлі index.php шаблону — це нормальна практика.
- SVG: Використання саме .svg для лого та фавікона — це топ-рішення. Воно буде чітким на будь-якому екрані (Retina), що додає сайту професійності.
- Змінна $this: Переконайся, що цей код викликається всередині головного файлу шаблону index.php, де $this є екземпляром класу HtmlDocument.
Маленька підказка: Якщо ти хочеш додати звичайну іконку .ico (для старих браузерів), код буде майже такий самий, тільки type зміниться на image/x-icon.
Щоб змусити Joomla шукати файл в іншому місці, тобі потрібно змінити підхід до формування шляху.
Метод HTMLHelper::_('image', ...) з параметром true спеціально заточений під стандартну ієрархію Joomla (спочатку папка шаблону, потім системна папка media).
Якщо твоя іконка лежить у нестандартному місці, у тебе є два основні шляхи:
1. Пряме вказання шляху (найпростіший варіант)
Ти можеш просто передати рядок зі шляхом від кореня сайту замість використання HTMLHelper.
// Якщо файл лежить у папці /custom_folder/icons/$faviconPath = 'custom_folder/icons/my-icon.svg';$this->addHeadLink($faviconPath, 'icon', 'rel', ['type' => 'image/svg+xml']);У цьому випадку Joomla не буде нічого "шукати", вона просто вставить цей текст у тег <link href="/...">.
2. Використання URI (більш "правильний" шлях для PHP)
Якщо ти хочеш, щоб шлях генерувався динамічно (наприклад, з урахуванням домену), краще використовувати клас Uri.
use Joomla\CMS\Uri\Uri;// Отримуємо повний шлях до кореня сайту + твоя папка$faviconPath = Uri::root() . 'assets/design/favicon.svg';$this->addHeadLink($faviconPath, 'icon', 'rel', ['type' => 'image/svg+xml']);Як працює пріоритет у HTMLHelper (важливо для розуміння)
Коли ти використовуєш HTMLHelper::_('image', 'file.svg', '', [], true), Joomla працює за таким алгоритмом "пошуку":
- templates/ваш_шаблон/images/file.svg
- media/templates/site/ваш_шаблон/images/file.svg (це стандарт для Joomla 4/5/6)
- images/file.svg (загальна папка медіа)
Чому не варто виносити іконку в зовсім іншу папку? Для сайту, де ти використовуєш Joomla 6, найкраща практика — тримати все в папці media/templates/site/назва_шаблону/. Це дозволяє Joomla правильно кешувати ресурси та підтягувати їх при оновленнях.
Порада для розробника
Якщо ти зараз на етапі дизайну та верстки шаблону, я раджу використовувати відносні шляхи через Uri::base(true). Це гарантує, що якщо ти перенесеш сайт з локального сервера (наприклад, localhost/site/) на реальний хостинг (site.com), усі картинки та іконки не "зламаються".
// Uri::base(true) поверне підпапку, якщо сайт не в корені$path = Joomla\CMS\Uri\Uri::base(true) . '/my_custom_folder/icon.svg';