我们将要学习一下 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. 1 <?php
  2. 2 load('@.hanshuu');// 调用common下名为hanshuu.php的扩展函数
  3. 3 ?>

3.在配置文件中加载:config.php中添加:‘LOAD_EXT_FILE‘ =>'某函数的文件名';

  1. 1 <?php
  2. 2 return array(
  3. 3 'LOAD_EXT_FILE'=>'function', //function为扩展函数所在的php文档名
  4. 4 );
  5. 5 ?>
  6. 6
  7. 7 然后在IndexAction.php中的调用代码如下
  8. 8
  9. 9 <?php
  10. 10 hanshuu();
  11. 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/

掌握Thinkphp3.2.0----模版基础的更多相关文章

  1. ASP.NET MVC 3.0 Controller基础

    ASP.NET MVC 3.0 Controller基础   1.Controller类与方法 Controller(控制器)是ASP.NET MVC的核心,负责处理浏览器请求,并作出响应.Cotro ...

  2. 1.0 Android基础入门教程

    1.0 Android基础入门教程 分类 Android 基础入门教程 本教程于2015年7月开始撰写,耗时半年,总共148节,涵盖了Android基础入门的大部分知识,由于当时能力局限,虽已竭尽全力 ...

  3. T4模版基础例子

    <#@ template debug="false" hostspecific="true" language="C#" #> ...

  4. Cocos2d-x3.0模版容器具体解释之二:cocos2d::Map&lt;K,V&gt;

    1.概述: 版本号: v3.0 beta 语言: C++ 定义在 "COCOS2DX_ROOT/cocos/base" 路径下的 "CCMap.h" 的头文件里 ...

  5. 五指cms模版基础

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Google的SPDY协议成为HTTP 2.0的基础

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt384 据TNW援引 IFTF HTTP 工作组主席 Mark Notting ...

  7. flume 1.8.0 开发基础

    本文由云+社区发表 作者:皮皮熊 概述 Apache Flume是一个用于高效地从大量异构数据源收集.聚合.传输到一个集中式数据存储的分布式.高可靠.高可用的系统. Apache Flume是Apac ...

  8. spring boot2.0(一 ) 基础环境搭建

    1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...

  9. Axure8.0入门级基础操作到高手产品经理

    宅男下载了一个Axure8.0.从来没有用过,那就从最基础的了解一下呗. 1.添加元件,选择元件设置样式(右侧对话框中)略!!!!! 2.按住ctrl键,用鼠标点选元件,可以任意旋转3.点元件上的黑圆 ...

随机推荐

  1. SVN 删除误上传到服务器的文件

    使用Axure软件的时候,不小心把一些无用的文档也提交到了SVN上了. 当更新服务器上的文件到本地,然后删除误提交的文件时,出现了一个错误,见下图:   错误:cannot verify lock o ...

  2. Web前端学习笔记:Bootstrap框架

    很久之前就有很多人给我推荐twitter的Bootstrap框架,但是直到前几天我才真正学习了下Bootstrap,的确是相当棒的框架,至少从视觉体验上超越了很多以前碰到了前端UI框架.今天我要聊聊B ...

  3. Linux From Scratch - Version 7.7-systemd (中文)

    Linux From Scratch - Version 7.7-systemd: https://linux.cn/lfs/LFS-BOOK-7.7-systemd/index.html

  4. jstl core 库 之 out set remove

    jstl 核心库 out标签 out:输出的标签 * value :输出的值 * default :默认值 * escapeXml :是否转移 默认为true(转义) 代码: <!-- 输出常量 ...

  5. (2016弱校联盟十一专场10.3) B.Help the Princess!

    题目链接 宽搜一下就行. #include <iostream> #include<cstdio> #include<cstring> #include<qu ...

  6. ios原声音频播放AVAudioSession 总结

    //音频播放/*英译:record:录音 */ 1 导入头文件#import<AVFoundation/AVFoundation.h>//AVAudioSession是一个单例模式.在IO ...

  7. ibatis.net 中SqlMaps的xml文件的例子

    <?xml version="1.0" encoding="utf-8" ?> <!--=========================== ...

  8. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  9. Linux服务器init 5启动图形界面,报错Retrigger failed udev events的解决方法

    1.开启linux系统的桌面环境,使用startx未成功,报如下错误: 提示:Retrigger failed udev events [root@ /]# startx xauth: creatin ...

  10. response.sendRedirect()与request.getRequestDispatcher().forward()区别

    Servlet中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳 ...