velliz/pte

puko 模板引擎

0.2.3 2024-09-28 12:23 UTC

This package is auto-updated.

Last update: 2024-09-28 12:25:18 UTC


README

PTE 是一个专为性能和兼容性而构建的独立模板引擎,适用于独立使用。当 PTE 运行时,它会遍历 HTML DOM 树到 PHP 数组(词法分析器)并将输出与数据规范(解析器)结合。根据提供的 index.php 示例,在不开启缓存的情况下,渲染 HTML 页面平均耗时 0.004 秒,开启缓存后为 0.002 秒。

安装

composer require velliz/pte

此命令用于使用 Composer 安装 "velliz/pte" 包。它将包添加为项目的依赖项。

其他要求

  • ext-json
  • ext-xmlrpc

可用标签

使用示例

实例化对象

$pte = new Pte(false, true, true);
$pte->SetMaster('template/master.html');
$pte->SetHtml('template/view.html');

在上面的代码片段中,使用三个参数实例化了 Pte 类的对象:将模板文件缓存为 true,使用主文件为 true,使用 HTML 主体文件为 true。

使用 SetMaster() 方法通过文件路径 'template/master.html' 设置主文件,并使用 SetHtml() 方法通过文件路径 'template/view.html' 设置视图模板的 HTML 文件。

您还可以创建自己的解析规则,如下所示

class BaseUrl implements \pte\CustomRender
{

    var $fn;
    var $param;

    var $tempJs = '';
    var $tempCss = '';

    public function Parse($data = null, $template = '', $templateBinary = false)
    {
        if ($this->fn === 'url') {
            return 'https:///' . $this->param;
        }
        return '';
    }

    /**
     * @param $fnName
     * @param $paramArray
     */
    public function Register($fnName, $paramArray)
    {
        $this->fn = $fnName;
        $this->param = $paramArray;
    }
}

上面的代码定义了 BaseUrl 类,该类实现了 \pte\CustomRender 接口。Parse() 方法用于为模板引擎定义自定义解析规则。在此示例中,如果函数名为 'url',则返回使用提供的参数构建的 URL。否则,返回空字符串。

要使用 BaseUrl 自定义类在 HTML DOM 中渲染标签,可以使用以下代码

{!url(home)}

为了设置数据值,您可以创建 BaseUrl 类的实例,并将其作为第一个参数传递给 SetValue() 方法。第二个参数应该是数组格式的数据。以下是一个示例

$v = new BaseUrl();

$pte->SetValue(array(
    'FirstCircle' => 'Selamat Datang !',
    'WishList' => array(
        array(
            'Lingkaran' => 'Bulat Sempurna 1',
            'Anak' => array(
                array(
                    'Umur' => 20,
                    'Anak2' => array(
                        array('Umur2' => 41),
                        array('Umur2' => 42),
                        array('Umur2' => 43),
                    ),
                ),
                array(
                    'Umur' => 19,
                    'Anak2' => array(
                        array('Umur2' => 14),
                        array('Umur2' => 15),
                        array('Umur2' => 16),
                    ),
                )
            ),
        ),
        array(
            'Lingkaran' => 'Bulat Sempurna 2',
            'Anak' => array(
                array(
                    'Umur' => 46,
                    'Anak2' => array(
                        array('Umur2' => 9),
                    ),
                ),
            ),
        ),
    ),
    'Wishlist2' => array(
        'val' => 'DARI CONTROLLER',
    ),
    'namaband' => 'K-POP',
    'Umur' => 23,
    'Author' => 'Didit Velliz',
    'Member' => array(
        array(
            'NamaMember' => 'Universitas X',
            'Alamat' => 'Bandung, Indonesia',
            'Hobi' => array(
                array('List' => 'Makan'),
                array('List' => 'Traveling'),
                array('List' => 'Tidur'),
            ),
        )
    ),
    'NamaMember' => 'Laptop Gaming',
));

要获取结果,您可以使用 Output() 方法,该方法使用词法分析和解析器处理 HTML 输入。以下是一个示例

$pte->Output($v, Pte::VIEW_HTML);

您还可以选择将 Pte::VIEW_JSON 作为输出格式。

示例

master.html

<!DOCTYPE html>
<html>
<head>
    <base href="{!url(/)}">
    <title>Page {!FirstCircle}</title>
</head>
<body>
<div class="container">
    <h1>Welcome to site {!Pass}</h1>
    <p>Today will be preparation {!url(/test/sumber)}</p>
    WishList 1
    <hr>
    <!--{!WishList}-->
        <p>Mulai - {!Lingkaran}</p>
        <!--{!Anak}-->
            <div>Ini anak 1 - {!Umur}</div>
            <!--{!Anak2}-->
                <div>Ini anak 2 - {!Umur2}</div>
            <!--{/Anak2}-->
            <div>Ini ulangi anak 1 - {!Umur}</div>
        <!--{/Anak}-->
        <h1>Sekian</h1>
    <!--{/WishList}-->
    <hr>
    <!--{!Wishlist2}-->
    <p>Whistlist 2 {!val}</p>
    <!--{/Wishlist2}-->

    {CONTENT}

    Band 1: {!namaband}
    <!--{!Wishlist2}-->
    <p>Test Whistlist 2 {!val}</p>
    <!--{/Wishlist2}-->
</div>

{!view(sidebar.html)}

{!part(css)}
{!part(js)}

</body>
</html>

view.html

{!css(<link href="template/bootstrap.css" rel="stylesheet" type="text/css" />)}

<div>
    Hello: {!Author}<br>
    <h5>Member</h5>
    <!--{!Member}-->
        {!NamaMember}
        <br/>
        {!Alamat}
        <br/>
        <!--{!Hobi}-->
            Hobby: {!List}
        <!--{/Hobi}-->
    <!--{/Member}-->
</div>

{sidebar.html}

NAMA MEMBER : {!NamaMember}
<br>

{!js(<script src="template/jquery.min.js" type="text/javascript"></script>)}

关于

由印度尼西亚班加尔制作的 <3。

版权所有 2017 Didit Velliz