Template-engine/README.md

190 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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>
```
2. if
if标签。此标签为闭合标签condition属性为if的条件属性列表condition。
```
<if condition="$age eq 10">
// do something...
</if>
```
3. 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>
```
4. loop
循环标签。此标签为闭合标签属性列表name、id、key可选
```
<loop name="lists" id="item">
{item.id}
</loop>
<loop name="lists" id="item" key="i">
{i}、{item.id}
</loop>
```
5. assign
赋值标签在模板中创建新的php变量。此标签为自闭合标签属性列表name、value。
```
<assign name="username" value="TOP糯米" />
```
6. original
此标签为闭合标签。original标签中的内容不会被编译。
```
<original>
<loop name="lists" id="item">
{item.id}
</loop>
</original>
```
上例loop标签会被原样输出。
7. switch
此标签为闭合标签。
```
<assign name="value" value="1" />
<switch name="value">
<case value="0">
$name的值为0
</case>
<case value="1">
$name的值为1
</case>
<case>默认</case>
</switch>
```
8. include
在当前模板中加载其他模板文件。
9. 变量、函数调用
输出
```
{$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!" />
```