造轮子之模板引擎
Go to file
TOP糯米 0f718f798a 修改一处值传递为引用 2024-07-29 15:24:49 +08:00
engine 修改一处值传递为引用 2024-07-29 15:24:49 +08:00
extend 更新README、目录名 2024-07-29 15:11:13 +08:00
views 更新README、目录名 2024-07-29 15:11:13 +08:00
README.md 更新README、目录名 2024-07-29 15:11:13 +08:00
main.php 更新README、目录名 2024-07-29 15:11:13 +08:00
tmp_compiled.php 更新README、目录名 2024-07-29 15:11:13 +08:00

README.md

Template-engine

模板继承

模板继承通过extend标签与block标签配合使用实现。 一个最简单的继承

// Base/layout.html父级模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<block name="body"></block>
</body>
</html>

// Index/index.html

<extend file="Base/layout" />
<block name="body">
    <h3>内容主体</h3>
</block>

模板标签

内置一些常用标签

  1. php

php标签。此标签为闭合标签标签内的内容将被解析为原生php代码执行。

<php>
    echo '你好';
</php>
  1. if

if标签。此标签为闭合标签condition属性为if的条件属性列表condition。

<if condition="$age eq 10">
    // do something...
</if>
  1. else

else标签。此标签为自闭合标签可选属性condition存在condition属性则被解析为elseif属性列表condition可选

<if condition="$age eq 10">
    // do something...
<else />
    // do something...
</if>

<if condition="$age eq 10">
    // do something...
<else condition="$age eq 20" />
    // do something...
</if>
  1. loop

循环标签。此标签为闭合标签属性列表name、id、key可选

<loop name="lists" id="item">
    {item.id}
</loop>

<loop name="lists" id="item" key="i">
    {i}、{item.id}
</loop>
  1. assign

赋值标签在模板中创建新的php变量。此标签为自闭合标签属性列表name、value。

<assign name="username" value="TOP糯米" />
  1. original

此标签为闭合标签。original标签中的内容不会被编译。

<original>
    <loop name="lists" id="item">
        {item.id}
    </loop>
</original>

上例loop标签会被原样输出。

  1. switch

此标签为闭合标签。

<assign name="value" value="1" />
<switch name="value">
    <case value="0">
        $name的值为0
    </case>
    <case value="1">
        $name的值为1
    </case>
    <case>默认</case>
</switch>
  1. include

在当前模板中加载其他模板文件。

  1. 变量、函数调用

输出

{$username}
{$user.name}
{$user['name']}

函数调用

{:mb_substr($username, 0, 3, 'utf8')}
{$username|mb_substr=0,3,'utf8'}

自定义标签

新建自定义标签库类文件Extend.php可选择继承TagLib类支持点语法

闭合标签

class Extend extends TagLib
{
    public $tags = [
        'test' => ['attr' => 'start,length,id', 'close' => 1]
    ];

    public function _test($attr, $content)
    {
        $parse = '<?php for ($' . $attr['id'] . ' = ' . $attr['start'] . '; $' . $attr['id'];
        $parse .=  ' < ' . $attr['start'] . ' + ' . $attr['length'] . '; ';
        $parse .= '$' . $attr['id'] . '++): ?>';
        $parse .= $content;
        $parse .= '<?php endfor; ?>';
        return $parse;
    }
}

类创建完成后调用Engine中的loadTaglib方法加载Extend类

$config = [
    'ext' => 'html',
    'dir' => './templates/',
    'left' => '<',
    'right' => '>',
];
$engine = Engine::instance($config);
$engine->loadTaglib('extend', Extend::class);

添加完成后即可在模板中使用

<extend:test start="1" length="10" id="test">
    {$test}
</extend:test>

自闭合标签

添加一个描述

'say' => ['attr' => 'what', 'close' => 0]

新建_say方法

public function _say($attr)
{
    return "<?php echo '{$attr['what']}'; ?>";
}

模板调用

<extend:say what="Hello world!" />