proklung/twig-extensions-bundle

为 Twig 定制的扩展和函数。

安装: 123

依赖者: 1

建议者: 0

安全: 0

星星: 2

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

1.6.7 2021-08-15 11:44 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.bundlehttps://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 - 通过路由及其参数获取 url
  • absolute_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 类的实例。应考虑,这不是组件中定义的类,而是 \CBitrixComponent
  • templateFolder - 相对于 DOCUMENT_ROOT 的当前模板目录的路径
  • parentTemplateFolder - 如果使用复合组件,则为父组件模板目录的路径。该变量不考虑模板继承时使用,例如在 twig 中使用 extends 函数时的情况
  • lang - 当前模板的语言相关变量数组。将在 1.1 版本中删除

Bitrix 函数

  • showComponent() - 等同于 \CMain::IncludeComponent()。该函数仅连接组件,但不返回组件的运行结果。如果使用 APPLICATION 对象调用组件连接,则 twig 会尝试输出该方法返回的值,这通常会导致模板中出现伪影。
  • getMessage() - 与函数 GetMessage() 或方法 \Bitrix\Main\Loc::getMessage() 的同义词,如果项目使用 d7
  • bitrix_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']
);

如果没有安装,则相应的服务将在容器编译阶段被删除。

的初始配置优先于外部传递的配置。