В Joomla 5 появились настраиваемые email-шаблоны, как системные, так и сторонних компонентов. Их нельзя (пока что) добавить самостоятельно, они добавляются расширениями при установке. Но их можно отредактировать в Система - Шаблоны - Шаблоны писем. В настройках шаблонов писем (кнопка настроек компонента в верхнем правом углу) мы выбираем формат писем текст или HTML. Тогда становятся доступны настройки макетов шаблонов писем Joomla. Эти глобальные параметры можно переопределить в каждом конкретном email-шаблоне. Таким образом для каждого из email-шаблонов можно указать свою вёрстку и настройки логотипа.
Это, конечно, требует отдельной подробной статьи... Для начала несколько скриншотов.
Для разработчиков: как добавить свои переменные для e-mail шаблонов Joomla?
Полезны окажутся 2 триггера для плагинов: onMailBeforeTagsRendering
и onMailBeforeRendering
.
Триггер onMailBeforeRendering в Joomla
- onMailBeforeRendering
- Это триггер, который позволяет добавлять свои шорт-коды для строковой замены в плагине. Отдать туда надо массив вида
[ variable_name => variable_value ]
.
Из админки свои переменные нужно добавлять уже с фигурными скобками: {variable_name}
заменится на variable_value
. Аргументом $event
плагина является экземпляр класса BeforeRenderingMailTemplateEvent
, в котором есть кроме прочих 2 метода: getTemplate()
(получение объекта мейлера, куда можно добавлять свои данные) и getTemplateId()
(получение id шаблона письма вида com_users.registration.admin.new_notification
), по которому мы определяем нужный ли это для нас email-шаблон или нет. Аналогично контексту в контент-плагинах.
Также полезное свойство класса для передачи данных из плагина в лейаут письма для рендера - $layoutTemplateData
. Это ассоциативный массив.
<?php
// Получаем текущий мейлер
$mailTemplate = $event->getTemplate();
$data = [
'variable_name' => 'variable_value'
];
// с Joomla 4 для всех типов писем. 2-й аргумент - plain - текстовый формат письма
$mailTemplate->addTemplateData($data, false);
// с Joomla 5.2 - для HTML-писем
$mailTemplate->addLayoutTemplateData($data);
// пример из ядра Joomla
// Add additional data to the layout template
$this->addLayoutTemplateData([
'siteName' => $app->get('sitename'),
'lang' => substr($this->language, 0, 2),
]);
Триггер onMailBeforeTagsRendering в Joomla
- onMailBeforeTagsRendering
- Это триггер, который добавляет ваши переменные в список доступных переменных для замены в окне редактирования email шаблона Joomla. Отдать туда нужно тот же самый массив, который отдавали в предыдущем триггере.