wanze / template-engine-twig
ProcessWire 模块,向 TemplateEngineFactory 添加 Twig
v3.0.1
2023-08-03 20:47 UTC
Requires
- php: >=7.0
- composer/installers: ~1.0
- twig/twig: ^3.0
- wanze/template-engine-factory: ^2.0
Requires (Dev)
- phpunit/phpunit: ^6
README
一个 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 分支 上找到。如果您仍在使用 TemplateEngineFactory1.x
,请使用此版本。
安装
在 ProcessWire 安装根目录中执行以下命令
composer require wanze/template-engine-twig:^3.0
这将一步安装 TemplateEngineTwig 和 TemplateEngineFactory 模块。之后,不要忘记在 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()); });