wanze/template-engine-factory

为各种模板引擎如 Twig 提供了 ProcessWire 集成。

安装次数: 9,672

依赖者: 4

建议者: 0

安全性: 0

星标: 26

关注者: 7

分支: 11

开放问题: 1

类型:processwire-module

v2.1.0 2021-07-04 20:48 UTC

This package is auto-updated.

Last update: 2024-09-05 03:41:43 UTC


README

StyleCI License: MIT ProcessWire 3

一个 ProcessWire 模块,集成了模板引擎如 Twig。它允许通过模板引擎渲染页面或单个模板,并通过实现简单的 MVC 模式鼓励将逻辑与标记分离。

  • 为了快速了解,请阅读本说明书的 入门 部分。
  • 更多信息请参阅官方的 文档

此模块的 2.x 版本在许多方面与 1.x 版本不同。提供模板引擎的模块 必须 使用 Composer 安装。请参阅 更新指南,因为新版本引入了向后不兼容的更改。模块的 1.x 版本可在 1.x 分支 上找到。

要求

  • ProcessWire 3.0 或更高版本
  • PHP 7.0 或更高版本
  • Composer

安装

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

composer require wanze/template-engine-factory:^2.0

这将安装模块及其捆绑的模板引擎 TemplateEngineProcessWire。此模板引擎使用 ProcessWire 内置的 TemplateFile 类进行渲染。其他模板引擎通过安装单独的 ProcessWire 模块添加到工厂中。

安装 Twig 和其他模板引擎

每个模板引擎都是一个单独的 ProcessWire 模块。例如,如果您想使用 Twig,则执行以下命令

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

这将安装 TemplateEngineTwig 模块及其所有依赖项。

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

配置

TemplateEngineFactory 提供以下配置选项

  • 模板引擎 用于渲染页面和模板的模板引擎。此处列出了任何已安装的引擎。
  • 模板路径 从站点目录到存储模板文件的相对路径。例如,templates/views/ 解析为 /site/templates/views/
  • 启用自动页面渲染 选择将页面渲染委托给模板引擎。您可以为特定模板启用或禁用此行为。
  • 用于与模板引擎交互的 API 变量 输入用于从 ProcessWire 模板(控制器)传递数据到模板引擎的 API 变量的名称。
  • 启用的模板 将自动页面渲染限制为此处选择的模板。
  • 禁用的模板 选择不应自动通过模板引擎渲染的页面模板。不要与 启用的模板 配置一起使用,要么启用模板,要么禁用模板。

模板引擎提供的模块中可能还有更多配置选项,例如,TemplateEngineTwig 模块提供有关 Twig 的几个配置选项。

可用的模板引擎

入门指南

本节假设使用 Twig 作为活动模板引擎,但使用方法与任何其他选定的模板引擎完全相同。

使用模板引擎渲染模板

假设以下 Twig 模板存在于 /site/templates/views/foo.html.twig

<h1>{{ title }}</h1>
{% if body %}
    <p>{{ body }}</p>
{% endif %}

可以使用 Template Engine Factory 模块在任何地方渲染该模板。

$factory = wire('modules')->get('TemplateEngineFactory');

// Render foo.html.twig with some data.
$factory->render('foo', ['title' => 'Foo', 'body' => 'Hello World']);

自动页面渲染

如果启用,此功能会在调用 Page::render 时使用模板引擎渲染 ProcessWire 页面。默认情况下,模块尝试找到与 ProcessWire 模板同名的一个 Twig 模板。

  • /site/templates/views/home.html.twig 对应于 /site/templates/home.php
  • /site/templates/views/about.html.twig 对应于 /site/templates/about.php

ProcessWire 模板可以访问一个 $view API 变量,该变量可用于将数据传递给模板引擎。由于模板引擎现在负责输出标记,ProcessWire 模板可以被视为 控制器。它们处理请求并通过 $view API 变量将数据传递给 视图 层。

示例

考虑以下位于 /site/templates/home.php 的 ProcessWire 模板

// Form has been submitted, do some processing, send mail, save data... 
if ($input->post->form) {
  // ...
  $session->redirect('./');
}

// Forward some data to twig
$view->set('nav_items', $pages->get('/')->children());

相应的 Twig 模板可能如下所示,位于 /site/templates/views/home.html.twig

<h1>{{ page.title }}</h1>

<ul class="nav">
{% for item in nav_items %}
    <li><a href="{{ item.url }}">{{ item.title }}</a></li>
{% endfor %}
</ul>

<form name="form">
    <input type="text" name="email">
    <input type="submit" value="Submit">
</form>

请注意,ProcessWire 模板不输出任何标记。它只包含业务逻辑并使用 $view API 变量将数据传递给 Twig 模板。就是这样!ProcessWire 中可用的最简单的 MVC 模式。😎