В Joomla 4.3.0 после многочисленных запросов разработчиков сторонних шаблонов были добавлены Namespaces для шаблонов.
Для чего нужно
Представим, что в вашем шаблоне сразу в нескольких макетах используется один и тот же скрипт для обработки текста. В моем случае это форматирование стоимости товаров.
Теперь можно создать хелпер TemplateHelper с методом prettifyPrice и вызвать его где это необходимо через:
use JoomlaVendor\Template\TemplateName\Site\Helper\TemplateHelper;
TemplateHelper::prettifyPrice(1000);
Да, в Joomla 3 можно было использовать JLoader, но это неправильный путь.
JLoader::register('TemplateHelper', JPATH_THEMES . "/{$template}/src/Helper/TemplateHelper.php");
Как добавить в свой шаблон
Namespace для шаблона добавляется так же как для любого другого расширения. Для начала в xml файл нужно указать новый тег
<namespace path="src">JoomlaVendor\Template\TemplateName</namespace>
Теперь создадим файл templates/TemplateName/src/Helper/TemplateHelper.php с содержимым:
<?php
namespace JoomlaVendor\Template\TemplateName\Site\Helper;
defined('_JEXEC') or die;
class TemplateHelper
{
static function prettifyPrice($value) {
return preg_replace('/(?=\B(?:\d{3})+(?!\d))/', " ", $value);
}
Обращу внимание, что в xml указывать фрагмент Site не нужно, но в php он уже будет обязательным, потому как Joomla сама его добавляет.
Если шаблон уже установлен и не является обновляемым, то необходимо удалить файл
administrator/cache/autoload_psr4.php
После авторизации в панели управления он будет пересоздан и в конце появится строка такого вида:
'JoomlaVendor\\Template\\TemplateName\\Site\\' => [JPATH_SITE . '/templates/TemplateName/src'],