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-