Html模板引擎
默认分隔符为
标签说明
直接输出变量
//入库转译只需一次,输出的时候转译要n次。所以这边输出不做htmlspecialchars转译。建议入库前转义。
{{$a}}
{{+$a}}
htmlspecialchars转译输出 v2.7.1+可用
输出数组
一维数组: {{$a['key']}}或者{{$a.key}]} {{+$a['key']}}或者{{+$a.key}]} htmlspecialchars转译输出 v2.7.1+可用
二维数组: {{$a['key1']['key2']}}或者 {{$a.key1.key2}} {{+$a['key1']['key2']}}或者 {{+$a.key1.key2}} htmlspecialchars转译输出 v2.7.1+可用
多维数组: {{echo $a[..]….}} 用echo输出{{+echo $a[..]….}} htmlspecialchars转译输出 v2.7.1+可用
判断语句
{{if $abc <1 }}
。。。。
{{elseif}} 【可选】
。。。。
{{else}} 【可选】
。。。。
{{/if}}
循环语句
loop
{{loop $abc $key $val}} 【$key可选】
。。。
{{/loop}}
或
{{foreach $abc $key $val}} 【$key可选】
。。。
{{/foreach}}
包含公共模板
// 包含项目目录`/Views/Site/Index/index.html`模板文件
执行简单php代码
{{eval ...}}
执行某些函数
{{echo trim(' abc ')}}
格式化日期时间
设置插件挂载点
{{hook test}}
获取get、post、request请求参数
{{get name}}、{{post name}}、{{request name}}
获取配置文件配置项
{{config key1.key2}}
获取语言包配置项
{{lang key1.key2}}
根据url_model配置项,生成相应的url(如果是在子目录自动处理)
{{url 'Index/index'}}
生成的地址可能是:
/index.php/Index/index
/Index/index.html
/index.php?r=/Index/index
subdir/Index/index.html
subdir/index.php/Index/index
...
生成表单令牌
{{token}}
输出静态文件目录基地址
{{public}}
生成的地址如:
http://baidu.com/index.php 生成 /
http://baidu.com/public/index.php 生成/public/
http://baidu.com/subdir/public/ 生成/subdir/public/
修改配置`static__path` => 'http://img.attach.com/' 生成http://img.attach.com/
生成指静态文件目录的路径(自动处理项目部署在二级三级目录的问题),如果是存放在cdn/单独服务器有独立域名 ,只要修改配置文件的static__path
配置项为相应地址即可
静态文件管理
模板中判断有无某个模块的权限
使用模板标签{{acl xxx}}
{{acl user/add}}
我有添加用户的权限
{{/acl}}
或
{{acl user/add}}
我有添加用户的权限
{{else}}
{{/acl}}
模板布局
模板布局文件都是声明在应用名/View/layout
下,如声明一个模板布局文件 xxx/View/layout/master.html
内容为:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
<title>标题</title>
<link href="{{public}}css/Test/style.css" rel="stylesheet" type="text/css" media="screen" />
</head>
<body>
{{block content}}
aaa
{{/block}}
</body>
</html>
{{urldeper}}标签
模板注释
{{comment 我只是一个模板注释}}
代码注释,编译后会自动删除
自定义一个模板标签.
/**
* 添加一个模板标签
*
* @param string $pattern 正则
* @param string $replacement 替换成xx内容
* @param bool $haveDelimiter $pattern的内容是否要带上左右定界符
*
* @return bool
*/
public function addRule($pattern, $replacement, $haveDelimiter = true)
{
if ($pattern && $replacement) {
$this->pattern = $haveDelimiter ? '#'.$this->options['leftDelimiter'].$pattern.$this->options['rightDelimiter'].'#s' : "#{$pattern}#s";
$this->replacement = $replacement;
return true;
}
}