ThinkPHP3.2 前端模板相关

别问为啥,因为我是考古学家!公司后台是前后端不分离的.所以考古吧~

变量输出

1
2
3
$name = 'ThinkPHP';
$this->assign('name',$name);
$this->display();

然后就可以在模板中使用:

1
Hello,{$name}!

普通标签默认开始标记是{,结束标记是 }。也可以通过设置TMPL_L_DELIMTMPL_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} // 输出$_SERVER['SCRIPT_NAME']变量
{$Think.session.user_id} // 输出$_SESSION['user_id']变量
{$Think.get.pageNumber} // 输出$_GET['pageNumber']变量
{$Think.cookie.name} // 输出$_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
{$data.name|md5} 

如果函数有多个参数需要调用,则使用:

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
{/* 注释内容 */ } 或 {// 注释内容 } 
{// 这是模板注释内容 }

注意{和注释标记之间不能有空格。

多行注释

1
2
{/* 这是模板
注释内容*/ }

模板替换

在进行模板渲染之前,系统还会对读取的模板内容进行一些特殊字符串替换操作,也就是实现了模板输出的替换和过滤。该替换操作仅针对内置的模版引擎。

这个机制可以使得模板文件的定义更加方便,默认的替换规则有:

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', // 更改默认的/Public 替换规则
'__JS__' => '/Public/JS/', // 增加新的JS类库路径替换规则
'__UPLOAD__' => '/Uploads', // 增加新的上传路径替换规则
)

有了模板替换规则后,模板中的所有__PUBLIC__字符串都会被替换,那如果确实需要输出__PUBLIC__字符串到模板呢,我们可以通过增加替换规则的方式,例如:

1
2
3
'TMPL_PARSE_STRING'  =>array(
'--PUBLIC--' => '__PUBLIC__', // 采用新规则输出`__PUBLIC__`字符串
)

这样增加替换规则后,如果我们要在模板中使用__PUBLIC__字符串,只需要在模板中添加--PUBLIC--,其他替换字符串的输出方式类似。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2017 - 2023 Keep It Simple And Stupid All Rights Reserved.

访客数 : | 访问量 :