掌握Thinkphp3.2.0----模版基础
我们将要学习一下 ThinkPHP 模版,ThinkPHP 内置了一个基于 XML 的性能
卓越的模版引擎 ThinkTemplate,使用了动态编译和缓存技术,支持自定义标签库,
其实我还体会不到其中的强大,慢慢体会吧
一、变量输出
1.普通变量
控制器提供数据
1 //给模版传递一个变量 2 $user = '蜡笔小新'; 3 $this->assign('user', $user);
模版调用
{$user}----$前边不能有空格,否则不能够正常调用
1 //修改默认标签 2 'TMPL_L_DELIM'=>'<{', 3 'TMPL_R_DELIM'=>'}>',
2.复合变量
传递的方式是一样的,不同的是调用的方式
数组调用方式为:
1 User:{$data.user} Email:{$data.email} 2 User:{$data['user']} Email:{$data['email']}
对象调用方式为:
1 User:{$data->user} Email:{$data->email} 2 User:{$data:user} Email:{$data:email}
二、系统变量----PHP中的内置变量和 ThinkPHP 的系统变量
1 //输出PHP系统变量 2 {$Think.server.script_name} //$_SERVER['SCRIPT_NAME'] 3 {$Think.session.admin} //$_SESSION['admin'] 4 {$Think.get.user} //$_GET['user'] 5 {$Think.post.user} //$_POST['user'] 6 {$Think.request.user} //$_REQUEST['user'] 7 {$Think.cookie.name} //$_COOKIE['name'] 8 //ThinkPHP的系统变量 9 {$Think.const.APP_PATH} //目录 10 {$Think.config.url_model} //URL模式 11 {$Think.lang.var_error} //语言变量
三、使用函数
能够使用PHP中的内置函数或者TP中函数库中的函数包括自定义的函数,在使用的时候主要是参数的传递问题
这里说一下在TP中如何使用自定义的函数即扩展函数库
ThinkPHP扩展函数的三个方法
1.在Common文件中新建的function.php(不同的版本这个名字可能不一样,可能是function或common) 并把代码写入该文档 然后在indexAction.php中直接写函数名
然后在indexAction.php中:
2.临时性加载:在indexAction.php中使用load(‘’);示例:load('@.某函数的文件名'); //只在当前所在的方法中有效 存放函数的.php文件必须在common目录下
1 <?php
2 load('@.hanshuu');// 调用common下名为hanshuu.php的扩展函数
3 ?>
3.在配置文件中加载:config.php中添加:‘LOAD_EXT_FILE‘ =>'某函数的文件名';
1 <?php
2 return array(
3 'LOAD_EXT_FILE'=>'function', //function为扩展函数所在的php文档名
4 );
5 ?>
6
7 然后在IndexAction.php中的调用代码如下
8
9 <?php
10 hanshuu();
11 ?>
注意!:调用扩展函数的存放文件时 仅能使用以上3种扩展函数的方法中其中一种!否则会因为多次重复引用而出现编译报错!
如果有时,我们需要在模版中使用 PHP 函数的话,可以按照下面的格式使用:
{$user|md5}
如果有多个参数要传递,可以参考如下设置:
{$date|date="Y-m-d H:i:s",###}
PS:表示 date 函数传入两个参数,每个参数用逗号分割,这里第一个参数是 Y-m-d
H:i:s,第二个参数是前面要输出的 date 变量,因为该变量是第二个参数,因此需要用###
标识变量位置
前面输出变量,在后面定义,则不需要###
{$user|mb_substr=0,3,'UTF-8'}
多个函数用"|"隔开即可
{$user|mb_substr=0,3,'UTF-8'|md5|sha1}
PS:如果你觉得以上写法需要在脑海里二次翻译,太过于麻烦,那么可以用以下的格
式写法:
{:md5(mb_substr($user,0,3,'UTF-8'))}
当传递过来的变量如果没有值的时候,模版提供了默认值输出功能。
{$user|default='什么都没有!'}
四.使用运算符
我们可以在模版中使用运算符,包括对“+” 、 “-” 、 “*” 、 “/” 、 “%” 、 “--”和“++” 的
支持。
{$data['num']+10} //中括号
{$data['num']+getNum()} //函数
PS:在使用运算符的时候,不再支持 . 语法和常规的函数用法:
{$data.num+10} //错误的
{$data['num']+getNum} //错误
模版还支持三元运算符:
{$user ? '有值' : '无值'}
五.包含文件
这个地方主要是路径的问题
在一个系统中,可以包含通用的头文件和脚文件:header 和 footer。由于每个页面
的头脚都是相同的,所以需要独立分离出来,再用包含文件引入他们。
我们可以在 View 目录下 default 主题目录下创建一个 public 目录, 这个目录专门存
放公共调用模版文件。
1 <include file='Public/header' />//注意:没有后缀 2 <include file='Public/footer' />
也可以调用绝对路径模式:
1 <include file='./Weibo/Home/View/default/Public/header.tpl' />
同时调用多个模版文件:
1 <include file='Public/header,Public/footer' />
六.模版注释
模版支持注释功能,提供个模版制作人员参考。
{//这是注释}
{/*这也是注释*/}
{/*这是
多行注释*/}
七. 模版继承
继承一般的模版内容,修改特殊的模版内容
1 //基础模版需要子模版修改的部分可以用<block>包含,并且设置name值 2 <block name="main">主要内容</block> 3 //子模版只要按同样的方法,修改<block>内部的值即可完成修改 4 <block name="main">修改了</block> 5 //创建Public下base.tpl模版基页 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 9 <block name="title"><title>{$user}</title></block> 10 </head> 11 <body> 12 <include file="Public/header" /> 13 <block name="main">主要内容</block> 14 <include file="Public/footer" /> 15 </body> 16 </html> 17 //使用<extend>导入模版基页,name为路径,和include导入方法一致 18 <extend name="Public/base" /> 19 <block name="main">修改了</block>
八.模版布局
1.全局配置方式
1 //开启模版布局功能,并指定基础页 2 'LAYOUT_ON'=> true, 3 'LAYOUT_NAME'=>'Public/layout', //layout.tpl 文件 4 //基础页,{__CONTENT__}将被子页面的内容替换 5 <include file="Public/header" /> 6 {__CONTENT__} 7 <include file="Public/footer" /> 8 //替换变量可以变更为{__REPLACE__},默认是{__CONTENT__} 9 'TMPL_LAYOUT_ITEM' =>'{__REPLACE__}', 10 //子模版不需要载入模版基页,可以在开头加上{__NOLAYOUT__} 11 {__NOLAYOUT__}
2.模版标签方式
标签方式,并不需要在系统做任何配置,和模版继承类似,直接引入即可。
1 //子模版引入模版基页 2 <layout name="Public/layout" /> 3 //替换变量的方法 4 <layout name="Public/layout" replace="{__REPLACE__}" />
3.layout 控制布局
这个方法是在控制器里操作的。
1 public n function index() { 2 layout( true); 3 } 4 //引入指定基页 5 c public n function index() { 6 layout('Public/layout'); 7 //layout( false); //关闭 8 }
九.模版替换
在模版渲染之前, 系统还会对读取的模版内容进行一些特殊字符串替换操作, 也就实现
了模版输出的替换和过滤。类似于常量
1 __ROOT__: 会替换成当前网站的地址(不含域名) 2 __APP__: 会替换成当前应用的 URL 地址 (不含域名) 3 __MODULE__:会替换成当前模块的 URL 地址 (不含域名) 4 __CONTROLLER__(或者__URL__ 兼容考虑) : 会替换成当前控制器的 URL 地址(不 5 含域名) 6 __ACTION__:会替换成当前操作的 URL 地址 (不含域名) 7 __SELF__: 会替换成当前的页面 URL 8 __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/