wanze / template-engine-factory
为各种模板引擎如 Twig 提供了 ProcessWire 集成。
Requires
- php: >=7.0
- composer/installers: ~1.0
Requires (Dev)
- phpunit/phpunit: ^6
README
一个 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 的几个配置选项。
可用的模板引擎
- ProcessWire 使用 ProcessWire 的 TemplateFile 类进行渲染的模板引擎。此引擎包含在此模块中,但不会自动安装。安装模块 TemplateEngineProcessWire 并在 TemplateEngineFactory 模块配置中选中该引擎。
- Twig 请参阅:https://github.com/wanze/TemplateEngineTwig
- Pug 请参阅:https://github.com/dreerr/TemplateEnginePug
- Smarty 请参阅:https://github.com/blue-tomato/TemplateEngineSmarty
- Mustache 请参阅:https://github.com/blue-tomato/TemplateEngineMustache
- Latte 请参阅:https://github.com/daun/TemplateEngineLatte
入门指南
本节假设使用 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 模式。😎