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
- 通过路由及其参数获取路径naturaljoin
csrf_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'] );
如果没有安装包,则相应的服务将在容器编译阶段被删除。
该包的初始配置优先于外部传递的配置。