proklung / twig-extensions-bundle
Custom twig extensions and functions for Twig.
Installs: 124
Dependents: 1
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=7.3 || ^8.0
- proklung/base-exception: ^1.0
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
- symfony/mime: ^4.4 || ^5.0
- symfony/security-csrf: ^4.4 || ^5.0
- symfony/twig-bridge: ^4.4 || ^5.0
- tijsverkoyen/css-to-inline-styles: ^2.2
- twig/cache-extra: ^3.3
- twig/twig: ^1.43 |^2 | ^3
Requires (Dev)
- icanhazstring/composer-unused: ^0.7.5
- proklung/phpunit-testing-tools: ^1.5
- symfony/var-dumper: ^4.0 || ^5.0
- dev-master
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.70
- 1.1.60
- 1.1.50
- 1.1.45
- 1.1.44
- 1.1.43
- 1.1.42
- 1.1.41
- 1.1.40
- 1.1.39
- 1.1.38
- 1.1.37
- 1.1.36
- 1.1.35
- 1.1.34
- 1.1.33
- 1.1.32
- 1.1.31
- 1.1.30
- 1.1.29
- 1.1.28
- 1.1.27
- 1.1.26
- 1.1.25
- 1.1.24
- 1.1.23
- 1.1.22
- 1.1.21
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.7.2
- 1.0.7.1
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.1
- 1.0.0
This package is auto-updated.
Last update: 2024-12-15 19:05:21 UTC
README
INTERNAL
Установка
composer require proklung/twig-extensions-bundle
Конфигурация
Файл local/configs/packages/twig_extension_pack.yaml
:
twig_extension_pack: # Путь к dev сборке Webpack webpack_build_dev_path: 'local/build/' # Путь к production сборке Webpack webpack_build_production_path: 'local/dist/' # Сервис кэшера (реализующий Symfony\Contracts\Cache\CacheInterface) для реализации работы директивы cache # (https://twig.symfony.com/doc/3.x/tags/cache.html) # Если null (~) - фича отключена cacher: 'cache.app' # Экспорт runtimes наружу (в Битрикс) runtimes_export: false
Расширения
render
Доработанный вариант функции render из фреймворка.
Первый вариант - рендер по контроллеру.
{{ render(controller("Local\\ExampleSimpleController", { 'id': 3 })) }}
Второй вариант - рендер по роуту.
{{ render('/api/entrypoint/', {'headers' : { 'X-Requested-With': 'XMLHttpRequest'} }) }}
Нюанс: не будет работать без установленного кастомного бандла с Symfony роутером (https://github.com/ProklUng/wp.symfony.router.bundle или https://github.com/ProklUng/BitrixSymfonyRouterBundle).
render_service
Рендер из сервиса. {{ render_service('app.controller.user', 'detail', {'user': user}, {'eventDispatcher': 'event_dispatcher'}) }}
renderController
Рендер контроллера. {{ renderController('Local\Buffering\Buffer::showBuffered', 'additional-styles') }}
dump
Стандартный твиговский dump.
dump_custom
Красивый твиговский dump (на базе Symfony\Component\VarDumper
).
json_decode
json_decode как твиговская функция.
glob
glob как твиговский фильтр.
{% for size, icon in 'img/icons/favicon-*.png'|glob %} <link rel="icon" type="image/png" sizes="{{ size }}" href="{{ asset(icon) }}"> {% endfor %} {% for css in 'node_modules/@fortawesome/fontawesome-free-webfonts/css/*.css'|glob(false) %} <link href="{{ asset(css) }}" rel="stylesheet"> {% endfor %}
youtube
{{ 'youtube_video_id'|youtube }} {# YouTube, размер по умолчанию (560x315) #} {{ 'youtube_video_id'|youtube(640) }} {# YouTube, заданной ширины (640x315) #} {{ 'youtube_video_id'|youtube(640, 480) }} {# YouTube с заданной шириной и высотой #} {{ 'youtube_video_id'|youtube('100%') }} {# YouTube, fluid ширина (100% x 315px) #} {% set content = '<div><p>Youtube video:</p>http://youtu.be/video_id</div>' %} {{ content|youtubeBoxes|raw }} {# div с p и встроенное видео #}
Прочее
encore_entry_link_tags
- путь к CSS entry Symfony Encoreencore_entry_script_tags
- путь к JS entry Symfony Encorequote
- строку в кавычкиsortbyfield
- сортировка массива по полюurl
- url по роуту и его параметрамabsolute_url
- абсолютный (со схемой и хостом) по urlpath
- путь по роуту и его параметрамnaturaljoin
csrf_token
- проверка csrf токена приложенияinclude(<путь к файлу>)
- включение php или html файлаtruncate
- обрезка строки с сохранением html тэгов
Wordpress:
apply_filter
- apply_filter.
Битриксовые
Из пакета, оригинальная документация:
Переменные из Битрикс
APPLICATION
- экземпляр класса \CMain, который хранится в глобальной переменной$APPLICATION
USER
- экземпляр класса \CUser, который хранится в глобальной переменной$USER
app
- экземпляр класса \Bitrix\Main\Application, если библиотека работает в битриксе с d7result
- массив $arResult, сформированный в компоненте. См. примечания по настройкеextract_result
params
- массив arParams, содержащий параметры компонентаtemplate
- экземпляр класса \CBitrixComponentTemplate для данного шаблонаcomponent
- экземпляр класса \CBitrixComponent для текущего компонента. Следует учитывать, что это не тот класс, который определен в компоненте, а именно \CBitrixComponenttemplateFolder
- путь до директории текущего шаблона относительно DOCUMENT_ROOTparentTemplateFolder
- путь до директории шаблона родительского компонента, если используется комплексный компонент. Эта переменная не учитывает родство шаблонов при использовании, например, функцииextends
в twiglang
- массив языкозависимых переменных текущего шаблона. Будет удалено в версии 1.1
Функции из Битрикс
showComponent()
- аналог\CMain::IncludeComponent()
. Данная функция только подключает компонент, но не возвращает результат работы компонента. Если вызывать подключение компонента с помощью объектаAPPLICATION
, то twig пытается вывести возвращаемое этим методом значение, что приводит часто к появлению артефактов в шаблонах.getMessage()
- синоним для функцииGetMessage()
или метода\Bitrix\Main\Loc::getMessage()
, если проект работает с d7bitrix_sessid_post()
иbitrix_sessid_get()
- переменные для генерации подписи с ID сессии в формах, синонимы одноименных функций в битриксеshowNote()
,showError()
иshowMessage()
- синонимы функцийShowNote()
,ShowError()
иShowMessage()
Переменные из PHP
К сожалению, в Битрикс иногда сложно обойтись без использования суперглобальных переменных напрямую в шаблонах, поэтому все суперглобальные переменные из php пробрасываются в каждый шаблон и доступны по именам _SERVER, _GET, _POST, _REQUEST, _SESSION, _COOKIE, _FILES, _ENV и _GLOBALS
Дополнительные дела
Если на проекте используется пакет с поддержкой твиговского движка
в компонентах, то в экземпляр того Твига автоматически перебрасываются все зарегистрированные в контейнере
extensions
(то, что отмечено в конфигах тэгом twig.extension
) и runtimes
(тэг twig.runtime
).
Также эта штука поддается использованию автономно, без контейнера.
Где-нибудь в init.php
(для extensions
; для runtimes
класс обработчик - Prokl\TwigExtensionsPackBundle\Services\Twig\TwigRuntimesBag
):
use Prokl\TwigExtensionsPackBundle\Services\Twig\TwigExtensionsBag; use Bitrix\Main\EventManager; $events = [new Local\TwigExtension, Local\FooExtension::class]; $handler = new TwigExtensionsBag($events); $eventManager = EventManager::getInstance(); $eventManager->addEventHandler( '', 'onAfterTwigTemplateEngineInited', [$handler, 'handle'] );
Если пакет не установлен, то соответствующие сервисы удаляется на стадии компиляции контейнера.
Изначальная конфигурация пакета имеет приоритет над прокидываемым снаружи.