stayfuneral / bitrix-twig-engine
Twig Engine for Bitrix framework
Installs: 16
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 3
Open Issues: 0
Type:package
Requires
- symfony/event-dispatcher: ^5.3
- twig/twig: ^3
This package is auto-updated.
Last update: 2024-05-28 15:17:14 UTC
README
Пакет для возможности использования 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);
Теперь каждый раз при отрисовке шаблона диспетчер событий будет добавлять ваше расширение в твиг.