ThinkPHP--模板基础

视图是MVC中的V层,而模板是将视图里要展现的数据进行解析编译的功能。TP框架内置了一个基于XML的模板引擎ThinkTemplate,使用动态编译和缓存技术,支持自定义标签库。

变量输出

在模板中输出变量是非常容易的,使用assign()方法,以键值对的方式传递变量和值。

//给模板传递一个变量
$user = '某某某';
$this->assign('user',$user);

在模板中可以这么调用:

{$user}

模板编译后的结果是:

<?php echo ($user);?>  //可以在Runtime中查看

模板标签{和$之间不能有任何空格,否则无法解析。如果你想更换两个{}可以设置:

//修改默认标签
'TMP_L_DELIM'=>'<{',
'TMP_R_DELIM'=>'}>',

调用方式就需要变成:

<{$user}>

如果传递一个数组,我们直接传递过去后,通过两种方式调用:

//给模板传递一个数组
$data['user'] = '某某某';
$data['email'] = 'test@test.com';
$this->assign('data',$data);

调用方式为:

User:{$data.user}  Email:{$data.email}
或
User:{$data['user']} Email:{$data['email']}

如果传递一个对象,我们之间传递过去后,通过两种方式调用:

//给模板传递一个对象
$data = new\stdClass();   //创建空对象
$data->user = '某某某';
$data->email = 'test@test.com';
$this->assign('data',$data);

调用方式为:

User:{$data->user} Email:{$data->email}
或
User:{$data:user}  Email:{$data:email}

系统变量

在模板中,不但可以输出PHP的系统变量,还可以输出TP的系统变量

//输出PHP系统变量
{$Think.server.script_name}   //$_SERVER['SCRIPT_NAME']
{$Think.session.admin}   //$_SESSION['admin']
{$Think.get.user}   //$_GET['user']
{$Think.post.user}   //$_POST['user']
{$Think.request.user}   //$_REQUEST['user']
{$Think.cookie.name}   //$_COOKIE['name']
//Thinkphp的系统变量
{$Think.const.APP_PATH}   //目录
{$Think.config.url_model}   //URL模式
{$Think.lang.var_error}   //语言变量

使用函数

有时侯我们需要在模板中使用PHP函数的话,可以按照下面的格式使用:

{$user|md5}

如果有多个参数要传递,可以参考如下设置:

{$date|date="Y-m-d H:i:s",###}

PS:表示date函数传入两个参数,每个参数用逗号分割,这里第一个参数是Y-m-d H:i:s,第二个参数是前面要输出的date变量,因为该变量是第二个参数,因此需要用###标识变量位置,编译后的结果是:

<?php echo (date('Y-m-d H:i:s'.$date));?>

前面输出变量,在后面定义,则不需要###

{$user|mb_substr = 0,3,'UTF-8'}

多个函数用“|”隔开即可

{$user|mb_substr=0,3,'UTF-8'|md5|sha1}

也可以用以下格式写法:

{:md5(mb_substr($user,0,3,'UTF-8'))}

使用运算符

我们可以在模板中使用运算符,包括
“+”、“-”、“*”、“/”、“%”、“–”、“++”等。
如:

{$data['num']+10}  //中括号
{$data['num']+getNum()}  //函数

模板还指出三元运算符

{$user ? '有值' : '无值'}  //如果为true则输出有值,否则输出无值

包含文件

在一个系统中,可以包含通用的头文件和脚文件:header和footer。由于每个页面的头和脚都是相同的,所以需要独立分离出来,再用包含文件引入。

我们可以在View目录下default主题目录下创建一个public目录,这个目录专门存放公共调用模块文件。

<include file='Public/header'/>
<include file='Public/footer'/>

也可使用绝对路径模式

<include file='./thinkphp/Home/View/default/Public/header.html'>

模板注释

模板支持注释功能

{//这是注释}
{/*这也是注释*/}
{/*这是
多行注释*/}

模板继承

//基础模板需要子模板修改的部分可以用<block>包含,并且设置name值
<block name="main">主要内容</block>
//子模板只要按照同样的方法,修改<block>内部的值即可完成修改
<block name="main">修改了</block>
//创建Public下base.html模板基页
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset-utf-8">
</head>
<body>
    <include file="Public/header"/>
    <block name="main">主要内容</block>
    <include file="Public/footer"/>
</body>
</html>
//使用<extend>导入模板基页,name为路径,和include导入方法一致
<extend name="Public/base"/>
<block name="main">修改了</block>

模板布局

TP框架的模板引擎内置了布局模板功能支持,可以方便实现模板布局以及布局嵌套功能,有三种布局方式:
1、全局配置方式

//开启模板布局功能,并指定基础页
'LAYOUT_ON'=>true,
'LAYOUT_NAME'=>'Public/layout',          //假设已经在view下的Public文件夹下已经建立了layout.html文件
//基础页,{__CONTENT__}将被子页面的内容替换
<inlude file="Public/header"/>
<__CONTENT__>
<include file="Public/footer"/>

模板替换

在模板渲染之前,系统还回对读取的模板内容进行一些特殊字符串替换操作,也就实现了模板输出的替换和过滤(以下皆不含域名)

__ROOT__:会替换成当前网站地址(不含域名)
__APP__:会替换成当前应用的URL地址(不含域名)
__MODULE__:会替换成当前模块的URL地址(不含域名)
__CONTROLLER__:(或者__URL__兼容考虑):会替换成当前控制器的URL地址
__ACTION__:会替换成当前操作的URL地址
__SELF__:会替换成当前页面URL
__PUBLIC__:会替换成当前网站的公共目录,通常是根目录下的/Public/目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值