Пакет для возможности использования Twig в компонентах битрикс.
Composer:
composer require stayfuneral/bitrix-twig
После установки в командной PHP-строке выполните следующий код:
$db = Bitrix\Main\Application::getConnection();
$entity = StayFuneral\BitrixTwig\Entites\TwigSubscribersTable::getEntity();
if(!$db->isTableExists($entity->getDBTableName())) {
$entity->createDbTable();
}
Далее в init.php
добавьте следующий код:
require_once '/path/to/vendor/autoload.php';
StayFuneral\BitrixTwig\Template\Engine::register();
В шаблонах компонентов используйте расширение twig
вместо php
, например, template.twig
.
Языковые файлы должны иметь такое же название и расширение, что и файлы шаблонов, например template.twig
, при этом оставаясь php-файлами (согласен, очень странно).
Т.е. содержимое файла должно выглядеть примерно так:
// /local/components/.../templates/.default/lang/ru/template.twig
<?php
$MESS['SOME_TEXT'] = 'Какой-то текст...';
Пока доступны 2 расширения:
getMessage(message, replaceArray)
- реализация метода
Bitrix\Main\Localization\Loc::getMessage($message, $replaceArray)
где массив $replaceArray
- необязательный параметр.
showComponent(name)
- вызов компонента. Помимо названия, можно передавать следующие необязательные параметры:
/**
* @param string $template шаблон компонента
* @param array $params параметры компонента
* @param CBitrixComponent $parentComponent
* @param array $functionParams
* @param $returnResult
*/
Добавить своё расширение можно через прослушивание события twig.before_render
(используется компонент EventDispatcher от Symfony).
Для этого создайте слушателя события, реализующего интерфейс Symfony\Component\EventDispatcher\EventSubscriberInterface:
namespace StayFuneral\Event;
use StayFuneral\BitrixTwig\Events\TwigRenderEvent;
use StayFuneral\Extensions\CustomExtension;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class TwigRenderSubscriber implements EventSubscriberInterface
{
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
TwigRenderEvent::EVENT_NAME => 'onBeforeRenderTwig'
];
}
/*
* Функция-обработчик события
*/
public function onBeforeRenderTwig(TwigRenderEvent $event)
{
// добавьте ваше расширение
$event->getTwig()->addExtension(new CustomExtension());
}
}
После этого добавьте данный класс в созданную ранее таблицу в БД:
use StayFuneral\BitrixTwig\Entites\TwigSubscribersTable;
use StayFuneral\Event\TwigRenderSubscriber;
TwigSubscribersTable::addSubscriber(TwigRenderSubscriber::class);
Теперь каждый раз при отрисовке шаблона диспетчер событий будет добавлять ваше расширение в твиг.