Skip to main content

Namespace добавили для шаблонов в Joomla 4.3

В 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'],