掌握Thinkphp3.2.0----模版基础
我们将要学习一下 ThinkPHP 模版,ThinkPHP 内置了一个基于 XML 的性能
卓越的模版引擎 ThinkTemplate,使用了动态编译和缓存技术,支持自定义标签库,
其实我还体会不到其中的强大,慢慢体会吧
一、变量输出
1.普通变量
控制器提供数据
//给模版传递一个变量
$user = '蜡笔小新';
$this->assign('user', $user);
模版调用
{$user}----$前边不能有空格,否则不能够正常调用
//修改默认标签
'TMPL_L_DELIM'=>'<{',
'TMPL_R_DELIM'=>'}>',
2.复合变量
传递的方式是一样的,不同的是调用的方式
数组调用方式为:
User:{$data.user} Email:{$data.email}
User:{$data['user']} Email:{$data['email']}
对象调用方式为:
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中的内置函数或者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 目录, 这个目录专门存
放公共调用模版文件。
<include file='Public/header' />//注意:没有后缀
<include file='Public/footer' />
也可以调用绝对路径模式:
<include file='./Weibo/Home/View/default/Public/header.tpl' />
同时调用多个模版文件:
<include file='Public/header,Public/footer' />
六.模版注释
模版支持注释功能,提供个模版制作人员参考。
{//这是注释}
{/*这也是注释*/}
{/*这是
多行注释*/}
七. 模版继承
继承一般的模版内容,修改特殊的模版内容
//基础模版需要子模版修改的部分可以用<block>包含,并且设置name值
<block name="main">主要内容</block>
//子模版只要按同样的方法,修改<block>内部的值即可完成修改
<block name="main">修改了</block>
//创建Public下base.tpl模版基页
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<block name="title"><title>{$user}</title></block>
</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>
八.模版布局
1.全局配置方式
//开启模版布局功能,并指定基础页
'LAYOUT_ON'=> true,
'LAYOUT_NAME'=>'Public/layout', //layout.tpl 文件
//基础页,{__CONTENT__}将被子页面的内容替换
<include file="Public/header" />
{__CONTENT__}
<include file="Public/footer" />
//替换变量可以变更为{__REPLACE__},默认是{__CONTENT__}
'TMPL_LAYOUT_ITEM' =>'{__REPLACE__}',
//子模版不需要载入模版基页,可以在开头加上{__NOLAYOUT__}
{__NOLAYOUT__}
2.模版标签方式
标签方式,并不需要在系统做任何配置,和模版继承类似,直接引入即可。
//子模版引入模版基页
<layout name="Public/layout" />
//替换变量的方法
<layout name="Public/layout" replace="{__REPLACE__}" />
3.layout 控制布局
这个方法是在控制器里操作的。
public n function index() {
layout( true);
}
//引入指定基页
c public n function index() {
layout('Public/layout');
//layout( false); //关闭
}
九.模版替换
在模版渲染之前, 系统还会对读取的模版内容进行一些特殊字符串替换操作, 也就实现
了模版输出的替换和过滤。类似于常量
__ROOT__: 会替换成当前网站的地址(不含域名)
__APP__: 会替换成当前应用的 URL 地址 (不含域名)
__MODULE__:会替换成当前模块的 URL 地址 (不含域名)
__CONTROLLER__(或者__URL__ 兼容考虑) : 会替换成当前控制器的 URL 地址(不
含域名)
__ACTION__:会替换成当前操作的 URL 地址 (不含域名)
__SELF__: 会替换成当前的页面 URL
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
掌握Thinkphp3.2.0----模版基础的更多相关文章
- ASP.NET MVC 3.0 Controller基础
ASP.NET MVC 3.0 Controller基础 1.Controller类与方法 Controller(控制器)是ASP.NET MVC的核心,负责处理浏览器请求,并作出响应.Cotro ...
- 1.0 Android基础入门教程
1.0 Android基础入门教程 分类 Android 基础入门教程 本教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了Android基础入门的大部分知识,由于当时能力局限,虽已竭尽全力 ...
- T4模版基础例子
<#@ template debug="false" hostspecific="true" language="C#" #> ...
- Cocos2d-x3.0模版容器具体解释之二:cocos2d::Map<K,V>
1.概述: 版本号: v3.0 beta 语言: C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCMap.h" 的头文件里 ...
- 五指cms模版基础
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Google的SPDY协议成为HTTP 2.0的基础
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt384 据TNW援引 IFTF HTTP 工作组主席 Mark Notting ...
- flume 1.8.0 开发基础
本文由云+社区发表 作者:皮皮熊 概述 Apache Flume是一个用于高效地从大量异构数据源收集.聚合.传输到一个集中式数据存储的分布式.高可靠.高可用的系统. Apache Flume是Apac ...
- spring boot2.0(一 ) 基础环境搭建
1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...
- Axure8.0入门级基础操作到高手产品经理
宅男下载了一个Axure8.0.从来没有用过,那就从最基础的了解一下呗. 1.添加元件,选择元件设置样式(右侧对话框中)略!!!!! 2.按住ctrl键,用鼠标点选元件,可以任意旋转3.点元件上的黑圆 ...
随机推荐
- [PHP][位转换积累]之与运算截取二进制流的值
function getBit( $num, $bit, $mask ){ return $num>>$bit&$mask; } var_dump( getBit( 41, 3, ...
- 网络编程之getaddrinfo
IPv4中使用gethostbyname()函数完成主机名到地址解析,但是该API不允许调用者指定所需地址类型的任何信息,返回的结构只包含 了用于存储IPv4地址的空间.为了解决该问题,IPv6中引入 ...
- Redis初探
Redis如今已经成为Web开发社区中最火热的内存数据库之一,而他的诞生距离现在不过才6年的时间,随着Web2.0的蓬勃发展,网站数据快速增长,对高性能读写的需求也越来越多,再加上半结构化的数据比重逐 ...
- Swift - UIColor16进制编码与RGB格式互相转换
Swift UIColor 16进制编码转换RGB : 由于UI出图的时候,通常给的是16进制的编码颜色,我们在开发的时候需要将它转换为RGB格式,现在给出两种代码片段. 一.对UIColor进行扩展 ...
- C++ 基础知识复习(三)
43. 继承的几种方式: 答:共有继承public,保护继承protected,私有继承private.其中后两种继承会改变原有的访问级别. 44. 深复制与浅复制: 答:简单理解,深复制自己申请了内 ...
- 学习android推荐网站
1. Android Developers 作为一个Android开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会. 2. Android Gui ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- Knockout.js随手记(4)
动态绑定下拉列表 在<select> data-bind的options选项如果绑定到ko.observableArray(),就可以动态新增选项效果,也就是可以利用其完成常见的级联效果的 ...
- 如何设置让基于matplotlib的绘图库正常的显示no-ascii字符(中文字符)
添加一句: import matplotlib matplotlib.rc('font', family='simhei') 其中family直接指示字体名字就行,比如simhei 注意:如果不能正常 ...
- R实现灰色预测
1.简介 预测就是借助于对过去的探讨去推测.了解未来.灰色预测通过原始数据的处理和灰色模型的建立,发现.掌握系统发展规律,对系统的未来状态做出科学的定量预测.对于一个具体的问题,究竟选择什么样的预测模 ...