别问为啥,因为我是考古学家!公司后台是前后端不分离的.所以考古吧~
变量输出
1 2 3
| $name = 'ThinkPHP'; $this->assign('name',$name); $this->display();
|
然后就可以在模板中使用:
普通标签默认开始标记是{,结束标记是 }。也可以通过设置TMPL_L_DELIM
和TMPL_R_DELIM
进行更改。例如,我们在项目配置
1 2
| 'TMPL_L_DELIM'=>'<{', 'TMPL_R_DELIM'=>'}>',
|
模板标签的变量输出根据变量类型有所区别,刚才我们输出的是字符串变量,如果是数组变量,
1 2 3 4 5 6
| Name:{$data.name} Email:{$data.email}
Name:{$data['name']} Email:{$data['email']}
|
如果data变量是一个对象(并且包含有name和email两个属性),那么可以用下面的方式输出:
1 2 3 4 5 6
| Name:{$data:name} Email:{$data:email}
Name:{$data->name} Email:{$data->email}
|
系统变量
系统变量输出
普通的模板变量需要首先赋值后才能在模板中输出,但是系统变量则不需要,可以直接在模板中输出,系统变量的输出通常以 {$Think 打头,例如:
1 2 3 4
| {$Think.server.script_name} {$Think.session.user_id} {$Think.get.pageNumber} {$Think.cookie.name}
|
支持输出 $_SERVER
、$_ENV
、 $_POST
、 $_GET
、 $_REQUEST
、$_SESSION
和 $_COOKIE
变量。
常量输出
1 2 3
| {$Think.const.MODULE_NAME}
{$Think.MODULE_NAME}
|
配置输出
1 2
| {$Think.config.db_charset} {$Think.config.url_model}
|
语言变量
1 2
| {$Think.lang.page_error} {$Think.lang.var_error}
|
使用函数
我们往往需要对模板输出变量使用函数,可以使用:
如果函数有多个参数需要调用,则使用:
1
| {$create_time|date="y-m-d",
|
还可以支持多个函数过滤,多个函数之间用“|”分割即可,例如:
1
| {$name|md5|strtoupper|substr=0,3}
|
函数会按照从左到右的顺序依次调用。
如果你觉得这样写起来比较麻烦,也可以直接这样写:
1
| {:substr(strtoupper(md5($name)),0,3)}
|
默认值输出
1 2 3
| {$user.nickname|default="这家伙很懒,什么也没留下"} {$Think.get.name|default="名称为空"} {$Think.get.name|getName|default="名称为空"}
|
使用运算符
我们可以对模板输出使用运算符,包括对“+”“ ” “*” “/”和“%”的支持。
在使用运算符的时候,不再支持点语法和常规的函数用法,例如:
1 2 3 4 5
| {$user.score+10} {$user['score']+10} {$user['score']*$user['level']} {$user['score']|myFun*10} {$user['score']+myFun($user['level'])}
|
修改定界符
普通标签
1 2
| TMPL_L_DELIM TMPL_R_DELIM
|
例如在项目配置文件中增加下面的配置:
1 2
| 'TMPL_L_DELIM' => '<{', 'TMPL_R_DELIM' => '}>'
|
XML标签
1 2
| TAGLIB_BEGIN TAGLIB_END
|
例如在项目配置文件中增加下面的配置:
1 2
| 'TAGLIB_BEGIN'=>'[', 'TAGLIB_END'=>']',
|
三元运算符
1 2
| {$status?'正常':'错误'} {$info['status']?$info['msg']:$info['error']}
|
原样输出
可以使用literal
标签来防止模板标签被解析,例如:
1 2 3 4 5 6
| <literal> <if condition="$name eq 1 "> value1 <elseif condition="$name eq 2"/>value2 <else /> value3 </if> </literal>
|
上面的if
标签被literal
标签包含,因此if
标签里面的内容并不会被模板引擎解析,而是保持原样输出。
Literal标签还可以用于页面的JS代码外层,确保JS代码中的某些用法和模板引擎不产生混淆。
总之,所有可能和内置模板引擎的解析规则冲突的地方都可以使用literal标签处理。
模板注释
单行注释
注意{和注释标记之间不能有空格。
多行注释
模板替换
在进行模板渲染之前,系统还会对读取的模板内容进行一些特殊字符串替换操作,也就是实现了模板输出的替换和过滤。该替换操作仅针对内置的模版引擎。
这个机制可以使得模板文件的定义更加方便,默认的替换规则有:
1 2 3 4 5 6 7
| __ROOT__: 会替换成当前网站的地址(不含域名) __APP__: 会替换成当前应用的URL地址 (不含域名) __MODULE__:会替换成当前模块的URL地址 (不含域名) __CONTROLLER__(__或者__URL__ 兼容考虑): 会替换成当前控制器的URL地址(不含域名) __ACTION__:会替换成当前操作的URL地址 (不含域名) __SELF__: 会替换成当前的页面URL __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public
|
注意这些特殊的字符串是严格区别大小写的,并且这些特殊字符串的替换规则是可以更改或者增加的,
我们只需要在应用或者模块的配置文件中配置TMPL_PARSE_STRING
就可以完成。如果有相同的数组索引,就会更改系统的默认规则。例如:
1 2 3 4 5
| 'TMPL_PARSE_STRING' =>array( '__PUBLIC__' => '/Common', '__JS__' => '/Public/JS/', '__UPLOAD__' => '/Uploads', )
|
有了模板替换规则后,模板中的所有__PUBLIC__
字符串都会被替换,那如果确实需要输出__PUBLIC__
字符串到模板呢,我们可以通过增加替换规则的方式,例如:
1 2 3
| 'TMPL_PARSE_STRING' =>array( '--PUBLIC--' => '__PUBLIC__', )
|
这样增加替换规则后,如果我们要在模板中使用__PUBLIC__
字符串,只需要在模板中添加--PUBLIC--
,其他替换字符串的输出方式类似。