proklung / twig-extensions-bundle
为 Twig 定制的扩展和函数。
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-09-15 18:17:54 UTC
README
内部
安装
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.cn/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
标准的 Twig dump。
dump_custom
美观的 Twig dump(基于 Symfony\Component\VarDumper)。
json_decode
json_decode 作为 Twig 函数。
glob
glob 作为 Twig 过滤器。
{% 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- Symfony Encore CSS entry 路径encore_entry_script_tags- Symfony Encore JS entry 路径quote- 将字符串放入引号中sortbyfield- 根据字段对数组进行排序url- 通过路由及其参数获取 urlabsolute_url- 绝对 url(包括方案和主机)path- 通过路由及其参数获取路径naturaljoincsrf_token- 检查应用程序的 csrf 令牌include(<文件路径>)- 包含 php 或 html 文件truncate- 剪切字符串并保留 html 标签
WordPress
apply_filter- apply_filter。
Bitrix
来自 包 的原始文档
Bitrix 变量
APPLICATION- 存储在全局变量$APPLICATION中的 \CMain 类的实例USER- 存储在全局变量$USER中的 \CUser 类的实例app- 如果库在 Bitrix d7 上运行,则为 \Bitrix\Main\Application 类的实例result- 组件中形成的 $arResult 数组。有关extract_result的配置说明,请参阅备注params- 包含组件参数的 arParams 数组template- 对于此模板的 \CBitrixComponentTemplate 类的实例component- 对于当前组件的 \CBitrixComponent 类的实例。应考虑,这不是组件中定义的类,而是 \CBitrixComponenttemplateFolder- 相对于 DOCUMENT_ROOT 的当前模板目录的路径parentTemplateFolder- 如果使用复合组件,则为父组件模板目录的路径。该变量不考虑模板继承时使用,例如在 twig 中使用extends函数时的情况lang- 当前模板的语言相关变量数组。将在 1.1 版本中删除
Bitrix 函数
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 访问
额外事项
如果项目使用了支持twig引擎的包,则在该Twig实例中自动传递所有在容器中注册的 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'] );
如果没有安装包,则相应的服务将在容器编译阶段被删除。
该包的初始配置优先于外部传递的配置。