模板渲染

模板渲染
渲染模板输出最常用的是使用display方法,调用格式:
display('[模板文件]'[,'字符编码'][,'输出类型'])
模板文件的写法支持下面几种:
用法描述
不带任何参数自动定位当前操作的模板文件
[模块@][控制器:][操作] 常用写法,支持跨模块 模板主题可以和theme方法配合
完整的模板文件名直接使用完整的模板文件名(包括模板后缀)
下面是一个最典型的用法,不带任何参数:
// 不带任何参数 自动定位当前操作的模板文件
$this->display();
ThinkPHP3.2.3快速入门
本文档使用 看云 构建 - 56 -
表示系统会按照默认规则自动定位模板文件,其规则是:
如果当前没有启用模板主题则定位到: 当前模块/默认视图目录/当前控制器/当前操作.html ;
如果有启用模板主题则定位到: 当前模块/默认视图目录/当前主题/当前控制器/当前操作.html ;
如果有更改TMPL_FILE_DEPR设置(假设 'TMPL_FILE_DEPR'=>'_')的话,则上面的自动定位规则变
成: 当前模块/默认视图目录/当前控制器_当前操作.html 和
当前模块/默认视图目录/当前主题/当前控制器_当前操作.html 。
所以通常display方法无需带任何参数即可输出对应的模板,这是模板输出的最简单的用法。
通常默认的视图目录是View
如果没有按照模板定义规则来定义模板文件(或者需要调用其他控制器下面的某个模板),可以使用:
// 指定模板输出
// 表示调用当前控制器下面的edit模板
$this->display('edit');
或者指定控制器
// 表示调用Member控制器下面的read模板
$this->display('Member:read');
如果我们使用了模板主题功能,那么也可以支持跨主题调用,使用:
// 调用blue主题下面的User控制器的edit模板
$this->theme('blue')->display('User:edit');
渲染输出不需要写模板文件的路径和后缀,确切地说,这里面的控制器和操作并不一定需要有实际对应的
控制器和操作,只是一个目录名称和文件名称而已,例如,你的项目里面可能根本没有Public控制器,更
没有Public控制器的menu操作,但是一样可以使用
$this->display('Public:menu');
输出这个模板文件。
display方法支持在渲染输出的时候指定输出编码和类型,例如,可以指定编码和类型:
// 输出XML页面类型(配合你的应用需求可以输出很多类型)
$this->display('read', 'utf-8', 'text/xml');
事情总有特例,如果的模板目录是自定义的,或者根本不需要按模块进行分目录存放,那么默认的display
渲染规则就不能处理,这个时候,我们就需要使用另外一种方式来应对,直接传入模板文件名即可,例
如:
ThinkPHP3.2.3快速入门
本文档使用 看云 构建 - 57 -
$this->display('./Template/Public/menu.html');
这种方式需要指定模板路径和后缀,这里的Template/Public目录是位于当前项目入口文件位置下面(当
然如果需要也可以使用绝对路径)。
如果是其他的后缀文件,也支持直接输出,例如:
$this->display('./Template/Public/menu.tpl');
只要./Template/Public/menu.tpl 是一个实际存在的模板文件。
要注意模板文件位置是相对于项目的入口文件,而不是模板目录。
如果需要获取渲染模板的输出内容而不是直接输出,可以使用fetch方法。
fetch方法的用法除了不需要指定输出编码和类型外其它和display基本一致,格式:
fetch('模板文件')
模板文件的调用方法和display方法完全一样,区别就在于fetch方法渲染后不是直接输出,而是返回渲染
后的内容,例如:
$content = $this->fetch('Member:edit');
使用fetch方法获取渲染内容后,你可以进行过滤和替换等操作,或者用于对输出的复杂需求。
渲染内容
如果你没有定义任何模板文件,或者把模板内容存储到数据库中的话,你就需要使用show方法来渲染输出
了,show方法的调用格式:
show('渲染内容'[,'字符编码'][,'输出类型'])
例如,
$this->show($content);
// 也可以指定编码和类型
$this->show($content, 'utf-8', 'text/xml');
注意:show方法中的内容也可以支持模板解析。

 

posted @ 2017-12-04 10:17  sky20080101  阅读(120)  评论(0)    收藏  举报