dahas/easy-template

PHP 模板解析器

v1.1.0 2023-03-14 10:29 UTC

This package is auto-updated.

Last update: 2024-09-14 13:43:52 UTC


README

EasyTemplate 是一个 PHP 模板解析器,它将逻辑与视图分离。它简单地将 HTML 文件中标记的区域替换为控制器脚本生成的内容。

要求

PHP 8.1.2

安装

$ composer require dahas/easy-template 

示例

模板可以是完整的 HTML 文件,也可以是包含标记和片段的 HTML 段落。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>[[TITLE]]</title>
    </head>
    <body>
        <h1>[[HEADER]]</h1>
        <table class="table">
            <thead>
                <tr>
                    <th scope="col">#</th>
                    <th scope="col">NAME</th>
                    <th scope="col">AGE</th>
                    <th scope="col">CITY</th>
                </tr>
            </thead>
            <tbody>
                <!-- {{ROWS}} begin -->
                <tr>
                    <th scope="row">[[UID]]</th>
                    <td>[[NAME]]</td>
                    <td>[[AGE]]</td>
                    <td>[[CITY]]</td>
                </tr>
                <!-- {{ROWS}} end -->
            </tbody>
        </table>
    </body>
</html>

以下是如何加载模板的方法

$template = new EasyTemplate("path/to/template.html");

标记

标记是占位符。当解析 HTML 模板时,它们将被内容替换。标记由双方括号包围,如下所示:[[MARKER]]

片段

片段是模板中的 HTML 段落。它由两个标记定义,一个在段落的开始,一个在结束。两个片段标记都被大括号包围两次。您还可以将它们包裹在注释中

<!-- {{ROWS}} begin -->
<tr>
    <th scope="row">[[UID]]</th>
    <td>[[NAME]]</td>
    <td>[[AGE]]</td>
    <td>[[CITY]]</td>
    <td>[[COUNTRY]]</td>
</tr>
<!-- {{ROWS}} end -->

片段被当作模板处理。您甚至可以将一个片段放入自己的 HTML 文件中。

在模板中获取片段

$slice = $this->template->getSlice("ROWS");

从其自身文件加载片段

$slice = new EasyTemplate("path/to/slice.html");

解析标记和片段

要替换标记和片段并返回一个有效的 HTML 文档,您使用 parse() 方法。该函数将标记数组作为第一个参数,将片段数组作为第二个参数。

$template = new EasyTemplate("path/to/template.html");

$markers = [
    "TITLE" => "The title",
    "HEADER" => "Easy Template is cool!"
];

$slice = $template->getSlice("ROWS");

$rows = $slice->parse([
    "UID" => 1,
    "NAME" => "Angus Young",
    "AGE" => 66,
    "CITY" => "Melbourne",
]);

$slices = [
    "ROWS" => $rows
];

return $template->parse($markers, $slices);