Thinkphp模板概述

ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库。

Thinkphp内置模板有哪些优点

官方枚举了许多,我比较关注的是:

  • 支持文件包含
  • 一次编译多次运行,编译和运行效率非常高(官方用语)
  • 模板文件和布局模板更新,自动更新模板缓存

文件包含很重要,可以重复利用html代码,如head和最后的script等。

模板毕竟比原生代码效率低,缓存是有必要的,而改动模板会自动更新模板缓存,这一点是缓解程序员关注的焦点。

标签库暂时用不到,这么折腾的东西。。。

其他的没列举的优点,一般是个模板引擎都会有吧,如果是个引擎的话。

如何调用模板?

有变量要传递的话先 $view->assign('data',$data);

然后在控制器中最后调用 return $view->fetch();

会自动调用 [模板文件目录]/当前控制器名(小写+下划线)/当前操作名(小写).html 相应的模板文件。

可以指定,规则为 模块 @控制器/操作,如:return $view->fetch('admin@user/add');

或干脆来个全路径:return $view->fetch(APP_PATH.request()->module().'/view/public/header.html');

官方还搞了标签的分类,在我看了是没必要的,用的时候统一一点好,不要太人格分裂。

XML标签 主要完成一些逻辑判断、控制和循环输出,并且可扩展
普通标签 主要用于输出变量和做一些基本的操作

当然,标签可以配置,找找config.php吧。

常用输出例子

Hello,{$name}! //普通变量
Name:{$data.name} //数组
Name:{$data['name']} //数组
Name:{$data:name} //对象
Name:{$data->name} //对象
{$Think.session.user_id} //系统变量$_SESSION['user_id']
{$Think.APP_PATH} //常量
{$Think.config.default_module} //配置
{$Think.lang.page_error} //语言变量,顾名思义
{$user.nickname|default="这家伙很懒,还是留下了点什么"} //默认值

{$Request.get.id} //$Request类应用:$Request.方法名.参数
{$data.name|md5} //md5($data['name'])
{$data.name|substr=0,3} //substr($data['name'],0,3)
{$name|md5|strtoupper|substr=0,3} //大杂烩 substr(strtoupper(md5($name)),0,3))
{:substr(strtoupper(md5($name)),0,3)} //上面都可以改为这种直观写法,注意':'

运算符 ,直接截图:

三元运算符:{$status? '正常' : '错误'}

有一些有趣的写法,不建议挖坑。

如何原样输出

用literal标签,运营场景:可以用于页面的JS代码外层,确保JS代码中的某些用法和模板引擎不产生混淆。

如果乱搞的话,有一些注意事项,查文档去吧。

模板布局

第一种方式:全局配置方式: 去config.php配置一下,关键字:layout

第二种方式:模板标签方式:举个栗子:{layout name="layout" /}

第三种方式:使用layout控制模板布局: 在渲染之前(退出控制器前),$this->view->engine->layout('Layout/newlayout');

说明:

开启layout_on后,模板渲染流程就有所变化,在不开启layout_on布局模板之前,会直接渲染指定模板;开启之后,会先解析指定模板,并把解析后的内容替换到layout布局模板文件的{CONTENT}(可自定义)特定字符串,再做渲染。

进阶:看看模板继承

包含文件,使用{include file='模版文件1,模版文件2,...' title="$title" keywords="开源WEB开发框架"/}

标签库

了解一下(功能很强大):

标签库类似于Java的Struts中的JSP标签库,每一个标签库是一个独立的标签库文件,标签库中的每一个标

签完成某个功能,采用XML标签方式(包括开放标签和闭合标签)。

标签库分为内置和扩展标签库,内置标签库是 Cx 标签库。

重点学习内置标签

这个表很好懂了,里面的执行细节都用属性来代替。还是抛个链接吧,深入学习。

参考:

模板 http://www.kancloud.cn/manual/thinkphp5/118122

-end-

Thinkphp模板简单入门的更多相关文章

  1. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  2. 【Ecmall】ECMall2.x模板制作入门系列(认识ECMall模板)

    ECMall2.x模板制作入门系列之1(认识ECMall模板) 从ECMall2.0全新架构发布以来,随着版本的不断更新,ECMall已经逐渐走向一个稳定时期,是时候整理一些实用教程了.下面给大家带来 ...

  3. (转) ThinkPHP模板自定义标签使用方法

    这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下  转之--http://www.jb51.net/article/51584.htm   使用模板标签可以让网站前台开发 ...

  4. springboot 学习之路 1(简单入门)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  5. Vue的简单入门

    Vue的简单入门 一.什么是Vue? vue.js也一个渐进式JavaScript框架,可以独立完成前后端分离式web项目 渐进式:vue可以从小到控制页面中的一个变量后到页面中一块内容再到整个页面, ...

  6. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  7. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  8. [转]Scrapy简单入门及实例讲解

    Scrapy简单入门及实例讲解 中文文档:   http://scrapy-chs.readthedocs.io/zh_CN/0.24/ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...

  9. Bootstrap简单入门

    Bootstrap简单入门 BootStrap基本模板 <!DOCTYPE html> <html> <head> <meta charset="U ...

随机推荐

  1. windows phone 8.1开发:触控和指针事件1

    原文出自:http://www.bcmeng.com/windows-phone-touch/ UIElement类的触控事件: ManipulationStarting:当用户将手指放在 IsMan ...

  2. (Facebook开源项目)Fresco:一个新的Android图像处理类库

    在Facebook的Android客户端上快速高效的显示图片是非常重要的.然而多年来,我们遇到了很多如何高效存储图片的问题.图片太大,而设备太小.一个像素点就占据了4个字节数据(分别代表R G B和a ...

  3. 第六章:3D向量类

    第一节:类接口的设计 1.好的类在设计之前首先要回答下列问题:“这些类将包含哪些数据?”,“这个类将提供什么样的操作?”,“在哪些数据上执行操作?”. 我们已经知道我们要设计的是3D向量类,用来存储x ...

  4. Java进阶之内存管理与垃圾回收

    Java是在JVM所虚拟出的内存环境中运行的.内存分为栈(stack)和堆(heap)两部分.我们将分别考察这两个区域. 栈 在Java中,JVM中的栈记录了线程的方法调用.每个线程拥有一个栈.在某个 ...

  5. 树莓派Raspberry中成功安装RobotFramework+Selenium

    [原创链接]:http://www.cnblogs.com/atsats/p/6666848.html 一般RobotFramework都是安装在Windows/Linux的PC机上,这里将简单介绍在 ...

  6. PHP中的for循环

    循环 循环是操作某一个功能(执行某段代码). ①循环四要素: a 循环初始值 b 循环的条件 c 循环状态 d 循环体 ②for循环 a 穷举:把所有的可能性的都一一列出来. b 迭代:每次循环都会把 ...

  7. Spring Boot 中如何使用 Dubbo Activate 扩展点

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 公司的核心竞争力在于创新 – <启示录> 』 继续上一篇:< Spri ...

  8. 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好

    参考snowflace算法,基本思路: 序列12位(更格式化的输出后,性能损耗导致每毫秒生成不了这么多,所以可以考虑减少这里的位,不过留着也并无影响) 机器位10位 毫秒为左移 22位 上述几个做或运 ...

  9. (原)HashMap之java8新特性

    首先说一下HashMap存储结构,数组.链表.树这三种数据结构形成了hashMap.存储结构下图所示,根据key的hash与table长度确定table位置,同一个位置的key以链表形式存储,超过一定 ...

  10. 读 zepto 源码之工具函数

    Zepto 提供了丰富的工具函数,下面来一一解读. 源码版本 本文阅读的源码为 zepto1.2.0 $.extend $.extend 方法可以用来扩展目标对象的属性.目标对象的同名属性会被源对象的 ...