# Template-engine
### 模板继承
模板继承通过extend标签与block标签配合使用实现。
一个最简单的继承
```
// Base/layout.html(父级模板)
Title
// Index/index.html
内容主体
```
### 模板标签
内置一些常用标签
1. php
php标签。此标签为闭合标签,标签内的内容将被解析为原生php代码执行。
```
echo '你好';
```
2. if
if标签。此标签为闭合标签,condition属性为if的条件,属性列表:condition。
```
// do something...
```
3. else
else标签。此标签为自闭合标签,可选属性condition,存在condition属性则被解析为elseif,属性列表:condition(可选)。
```
// do something...
// do something...
// do something...
// do something...
```
4. loop
循环标签。此标签为闭合标签,属性列表:name、id、key(可选)。
```
{item.id}
{i}、{item.id}
```
5. assign
赋值标签,在模板中创建新的php变量。此标签为自闭合标签,属性列表:name、value。
```
```
6. original
此标签为闭合标签。original标签中的内容不会被编译。
```
{item.id}
```
上例,loop标签会被原样输出。
7. switch
此标签为闭合标签。
```
$name的值为0
$name的值为1
默认
```
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 = '';
$parse .= $content;
$parse .= '';
return $parse;
}
}
```
类创建完成后,调用Engine中的loadTaglib方法加载Extend类
```
$config = [
'ext' => 'html',
'dir' => './templates/',
'left' => '<',
'right' => '>',
];
$engine = Engine::instance($config);
$engine->loadTaglib('extend', Extend::class);
```
添加完成后即可在模板中使用
```
{$test}
```
#### 自闭合标签
添加一个描述
```
'say' => ['attr' => 'what', 'close' => 0]
```
新建_say方法
```
public function _say($attr)
{
return "";
}
```
模板调用
```
```