第 39 章 ThinkPHP--模版基础

学习要点: 1.变量输出 2.系统变量 3.使用函数 4.使用运算符 5.包含文件 6.模版注释 7.模版继承 8.模版布局 9.模版替换

本节课,我们将要学习一下 ThinkPHP 模版,ThinkPHP 内置了一个基于 XML 的性能 卓越的模版引擎 ThinkTemplate,使用了动态编译和缓存技术,支持自定义标签库。 一.变量输出 在模版中输出变量是非常容易的,使用 assign()方法,以键值对的方式传递变量和值。 //给模版传递一个变量 $user = '蜡笔小新'; $this->assign('user', $user); 在模版中可以这么调用: {$user} 模版编译后的结果是: //可以在 Runtime 可以查看 模版标签{和$之间不能用任何空格,否则无法解析。如果你想更换两个{}可以设置: //修改默认标签 'TMPL_L_DELIM'=>'<{', 'TMPL_R_DELIM'=>'}>', 调用方式就必须改变: <{$user}> 如果传递一个数组,我们直接传递过去后,通过两种方式调用: //给模版传递一个数组 $data['user'] = '蜡笔小新'; $data['email'] = 'bnbbs@163.com'; $this->assign('data', $data); 调用方式为: User:{$data.user} Email:{$data.email} User:{$data['user']} Email:{$data['email']} 如果传递一个对象,我们直接传递过去后,通过两种方式调用: //给模版传递一个对象 $data = new stdClass(); $data->user = '蜡笔小新'; $data->email = 'bnbbs@163.com'; $this->assign('data', $data); 调用方式为: User:{$data->user} Email:{$data->email} User:{$data:user} Email:{$data:email} 二.系统变量 在模版中,不但可以输出 PHP 的系统变量,还可以输出 ThinkPHP 的系统变量。 //输出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 变量,因为该变量是第二个参数,因此需要用### 标识变量位置,编译后的结果是: 前面输出变量,在后面定义,则不需要### {$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'))} PS:我个人认为把这些数据处理,都尽可能不要模版端,除非是必须在模版端才能处 理的。因为模版就是为了 HTML 和 JS,然后就是提供数据,不要包含各种过滤和业务逻辑。 当传递过来的变量如果没有值的时候,模版提供了默认值输出功能。 {$user|default='什么都没有!'}

四.使用运算符 我们可以在模版中使用运算符,包括对“+”、“-”、“*”、“/”、“%”、“--”和“++”的 支持。 {$data['num']+10} //中括号 {$data['num']+getNum()} //函数 PS:在使用运算符的时候,不再支持语法和常规的函数用法: {$data.num+10} //错误的 {$data['num']+getNum} //错误 模版还支持三元运算符: {$user ? '有值' : '无值'}

五.包含文件 在一个系统中,可以包含通用的头文件和脚文件:header 和 footer。由于每个页面 的头脚都是相同的,所以需要独立分离出来,再用包含文件引入他们。 我们可以在 View 目录下 default 主题目录下创建一个 public 目录,这个目录专门存 放公共调用模版文件。 也可以调用绝对路径模式: 同时调用多个模版文件:

六.模版注释 模版支持注释功能,提供个模版制作人员参考。 {//这是注释} {/*这也是注释*/} {/*这是 多行注释*/} 七.模版继承 模版继承是一项灵活的模版布局方式,它类似于子类继承父类,然后子类还可以进行适 当的修改以满足当前页面的需要。 //基础模版需要子模版修改的部分可以用包含,并且设置name值 主要内容 //子模版只要按同样的方法,修改内部的值即可完成修改 修改了 //创建Public下base.tpl模版基页 主要内容 //使用导入模版基页,name为路径,和include导入方法一致 修改了 八.模版布局 ThinkPHP 的模版引擎内置了布局模版功能支持,可以方便实现模版布局以及布局嵌套 功能。有三种布局方式: 1.全局配置方式 //开启模版布局功能,并指定基础页 'LAYOUT_ON'=>true, 'LAYOUT_NAME'=>'Public/layout', //layout.tpl 文件 //基础页,{__CONTENT__}将被子页面的内容替换 {__CONTENT__} //替换变量可以变更为{__REPLACE__} 'TMPL_LAYOUT_ITEM' =>'{__REPLACE__}', //子模版不需要载入模版基页,可以在开头加上{__NOLAYOUT__} {__NOLAYOUT__} 2.模版标签方式 标签方式,并不需要在系统做任何配置,和模版继承类似,直接引入即可。 //子模版引入模版基页 //替换变量的方法 3.layout 控制布局 这个方法是在控制器里操作的。 //开启布局,并引入默认地址基页 public function index() { layout(true); } //引入指定基页 public function index() { layout('Public/layout'); //layout(false); //关闭 }

九.模版替换 在模版渲染之前,系统还会对读取的模版内容进行一些特殊字符串替换操作,也就实现 了模版输出的替换和过滤。 __ROOT__: 会替换成当前网站的地址(不含域名) __APP__: 会替换成当前应用的 URL 地址 (不含域名) __MODULE__:会替换成当前模块的 URL 地址 (不含域名) __CONTROLLER__(或者__URL__ 兼容考虑): 会替换成当前控制器的 URL 地址(不 含域名) __ACTION__:会替换成当前操作的 URL 地址 (不含域名) __SELF__: 会替换成当前的页面 URL __PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/ 'TMPL_PARSE_STRING' =>array( '__PUBLIC__' => '/Common', // 更改默认的/Public 替换规则 '__UPLOAD__' => '/Uploads', // 增加新的上传路径替换规则 ) PS:__PUBLIC__可以改成--PUBLIC--同样的也可以。

我的个人博客,欢迎来访问!网址:http://www.miuu.club
原文地址:https://www.cnblogs.com/yu520zhong/p/4855871.html