模版基础[1]
ThinkPHP 内置了一个基于 XML 的性能卓越的模版引擎 ThinkTemplate,
使用了动态编译和缓存技术,支持自定义标签库。
一. 变量输出
在模版中输出变量是非常容易的,使用 assign()方法,以键值对的方式传递变量和值。
在 Home/controller/UserController.class.php 中输入以下代码:
1 class UserController extends Controller { 2 public function index() { 3 $user='蜡笔小新'; 4 $this->assign('user',$user);//第一个user是传给View/User/index.html中的user 5 $this->display(); 6 } 7 }
然后在 View/User/index.html 中直接调用 {$user} 即可输出user的值。
模版编译后的结果是: <?php echo ($user); ?> ,可以的 Runtime/Cache/Home 下查看
模版标签{和$之间不能用任何空格,否则无法解析。如果你想更换两个{}可以设置:
在 WeiBo/Common/Conf/config.php 中设置:
1 //修改默认标签 2 'TMPL_L_DELIM'=>'<{', 3 'TMPL_R_DELIM'=>'}>',
这样可以防止与javascript产生冲突。以后调用就是 <{$user}> ,也要注意中间不能有空格。
如果传递一个数组,我们直接传递过去后,通过两种方式调用:
在 Home/controller/UserController.class.php 插入以下代码:
1 class UserController extends Controller { 2 public function index() { 3 $data['user']='蜡笔小新'; 4 $data['email']='bnbbs@163.com'; 5 $this->assign('data',$data); 6 $this->display(); 7 } 8 }
然后在 View/User/index.html 中调用方式有两种:
1 //第一种,直接加dot在中间 2 {$data.user} 3 //第二种,使用PHP本来的方法 4 {$data['email']}
但其实在 Runtime/Cache/Home 中显示可见,调用的时候,还是会转化为以PHP本来的方式调用的。
如果传递一个对象,我们直接传递过去后,通过两种方式调用:
首先在 Home/controller/UserController.class.php 中插入以下代码:
1 class UserController extends Controller { 2 public function index() { 3 $data=new \stdClass(); 4 $data->user='蜡笔小新'; 5 $data->email='bnbbs@163.com'; 6 $this->assign('data',$data); 7 $this->display(); 8 } 9 }
然后在 View/User/index.html 中调用方式有两种:
1 //第一种,用对象的方式调用 2 {$data->user} 3 //第二种,直接用冒号的方式 4 {$data:email}
但其实在 Runtime/Cache/Home 中显示可见,调用的时候,还是会转化为以对象的方式调用的。
二.系统变量
在模版中,不但可以输出 PHP 的系统变量,还可以输出 ThinkPHP 的系统变量。
在 View/User/index.html 中写入以下代码,则在 Runtime/Cache/Home 会自动编译为相应的php代码:
1 {$Think.server.script_name} 2 {$Think.session.admin} 3 {$Think.get.user} 4 {$Think.post.user} 5 {$Think.request.user} 6 {$Think.cookie.name} 7 8 {$Think.const.APP_PATH} 9 {$think.config.url_model} 10 {$Think.lang.var_error}
在 Runtime/Cache/Home 显示为:
1 <?php echo ($_SERVER['SCRIPT_NAME']); ?><br> 2 <?php echo (session('admin')); ?><br> 3 <?php echo ($_GET['user']); ?><br> 4 <?php echo ($_POST['user']); ?><br> 5 <?php echo ($_REQUEST['user']); ?><br> 6 <?php echo (cookie('name')); ?><br> 7 8 <?php echo (APP_PATH); ?><br> 9 <?php echo ($think["config"]["url_model"]); ?><br> 10 <?php echo (L("var_error")); ?><br>
三. 使用函数
如果有时,我们需要在模版中使用 PHP 函数的话,可以按照下面的格式使用:
在 View/User/index.html 中调用:
{$user|md5} ,这时输出的即为传过来的user并用md5加密
如果有多个参数要传递,可以参考如下设置:
1 {$date|date="Y-m-d H:i:s",###}
PS:表示 date 函数传入两个参数,每个参数用逗号分割,这里第一个参数是 Y-m-d
H:i:s,第二个参数是前面要输出的 date 变量,因为该变量是第二个参数,因此需要用###
标识变量位置,编译后的结果是:
1 <?php echo (date($date,"Y-m-d H:i:s")); ?>
首先在 Home/controller/UserController.class.php 中传入参数:
class UserController extends Controller { public function index() { $date=time(); $this->assign('date',$date); $this->display(); } }
然后在 View/User/index.html 中写入:
1 {$date|date="Y-m-d H:i:s",###}
这时在 Runtime/Cache/Home 中显示的代码为:
1 <?php echo (date("Y-m-d H:i:s",$date)); ?>
浏览器输出的结果为当前的时间,格式为 Y-m-d H:i:s ,如果在 View/User/index.html 中的代码不加上###,则在 Runtime/Cache/Home 中显示为:
1 <?php echo (date($date,"Y-m-d H:i:s")); ?>
这时没有结果输出
前面输出变量,在后面定义,则不需要###
1 {$user|mb_substr=0,3,'UTF-8'}
这时在 Runtime/Cache/Home 中显示为:
1 <?php echo (mb_substr($user,0,3,'UTF-8')); ?>
多个函数用"|"隔开即可
1 {$user|mb_substr=0,3,'UTF-8'|md5|sha1}
PS:如果你觉得以上写法需要在脑海里二次翻译,太过于麻烦,那么可以用以下的格式写法:
1 {:md5(mb_substr($user,0,3,'UTF-8'))}
很类似PHP的写法,就是必须在前面加上":"
当传递过来的变量如果没有值的时候,模版提供了默认值输出功能。
1 {$user|default='什么都没有!'}
四.使用运算符
我们可以在模版中使用运算符,包括对“+”、“-”、“*”、“/”、“%”、“--”和“++”的支持。
在 Home/controller/UserController.class.php 写入以下代码:
1 class UserController extends Controller { 2 public function index() { 3 $data['num']=10; 4 $this->assign('data',$data); 5 $this->display(); 6 } 7 }
然后在 View/User/index.html 写入调用代码:
1 {$data['num']+10}
还有一种是使用function法, Home/controller/UserController.class.php 中的代码不变, View/User/index.html 中写入以下代码:
1 {$data['num']+getNum()} //getNum()是调用的函数
然后在 WeiBo/Common/Common/function.php 中写入以下getNum()的函数
1 function getNum() { 2 return 10; 3 }
这样返回时 $data['num'] 也是加上10.
模版还支持三元运算符:
1 {$data['num']?'有值':'无值'}