wanze/template-engine-twig

ProcessWire 模块,向 TemplateEngineFactory 添加 Twig

安装次数: 7,292

依赖者: 0

建议者: 0

安全: 0

星星: 12

关注者: 4

分支: 11

开放问题: 2

类型:processwire-module

v3.0.1 2023-08-03 20:47 UTC

This package is auto-updated.

Last update: 2024-09-03 23:07:53 UTC


README

Build Status StyleCI License: MIT ProcessWire 3

一个 ProcessWire 模块,向 TemplateEngineFactory 添加 Twig。

要求

  • ProcessWire 3.0 或更高版本
  • TemplateEngineFactory 2.0 或更高版本
  • PHP >= 7.0 用于版本 2.x,PHP >= 7.2.5 用于版本 3.x
  • Composer

此模块的 1.x 版本可在 1.x 分支 上找到。如果您仍在使用 TemplateEngineFactory 1.x,请使用此版本。

安装

在 ProcessWire 安装根目录中执行以下命令

composer require wanze/template-engine-twig:^3.0

这将一步安装 TemplateEngineTwigTemplateEngineFactory 模块。之后,不要忘记在 TemplateEngineFactory 模块的配置中启用 Twig 作为引擎。

ℹ️ 此模块包含测试依赖项。如果您使用 composer install 在生产环境中安装,请确保传递 --no-dev 标志以省略自动加载任何不必要的测试依赖项!。

配置

该模块提供了以下配置

  • 模板文件后缀 Twig 模板文件的后缀,默认为 twig.html
  • 在 Twig 模板中提供 ProcessWire API 变量 API 变量(如 $pages$input$config...)可在 Twig 中访问,例如,{{ config }} 用于配置 API 变量。
  • 调试 如果启用,Twig 将输出调试信息。该模块还注册了 Debug Extension,提供了 {{ dump() }} 函数以检查变量。
  • 自动重新加载模板(重新编译) 如果启用,每次源代码更改时都会重新编译模板。
  • 严格变量 如果设置为 false,Twig 将静默忽略无效变量(不存在或属性/方法不存在的变量)并替换为 null 值。如果设置为 true,Twig 将抛出异常。
  • 自动转义变量 如果启用,模板将自动转义变量。如果您使用 ProcessWire textformatters 转义字段值,请勿启用此功能。

扩展 Twig

可以在模块初始化后扩展 Twig。将方法 TemplateEngineTwig::initTwig 连接到注册自定义函数、扩展、全局变量、过滤器等。

以下是一个如何使用提供的钩子附加自定义函数的示例。

wire()->addHookAfter('TemplateEngineTwig::initTwig', function (HookEvent $event) {
    /** @var \Twig\Environment $twig */
    $twig = $event->arguments('twig');

    $twig->addFunction(new \Twig\TwigFunction('processwire', function () {
        return 'ProcessWire rocks!';
    }));
});

// ... and then use it anywhere in a Twig template:

{{ processwire() }}

上述钩子可以放在您的 site/init.php 文件中。如果您更喜欢使用模块,请将其放入模块的 init() 方法中,并确保模块已自动加载。

使用 Twig 扩展

Twig 扩展 是一个库,为 Twig 提供了多个有用的扩展。

这些扩展默认不包含在模块中,但您可以使用上面解释的相同钩子将它们添加到 Twig 中。

首先,在 ProcessWire 根目录中使用 Composer 安装库:composer require twig/extensions。然后,使用上述相同钩子注册所需的扩展。

wire()->addHookAfter('TemplateEngineTwig::initTwig', function (HookEvent $event) {
    /** @var \Twig\Environment $twig */
    $twig = $event->arguments('twig');
    
    // Register the extensions.
    $twig->addExtension(new Twig_Extensions_Extension_Text());
    $twig->addExtension(new Twig_Extensions_Extension_I18n());
    $twig->addExtension(new Twig_Extensions_Extension_Intl());
});