视图模板
一、模板的使用
每个模块的模板文件是独立的,为了对模板文件更加有效的管理,系统对模板文件按照目录划分,默认的模板文件定义规则是:
视图目录/[模板主题/]控制器名/操作名+模板后缀
默认的视图目录是应用的View目录,模板按照主题存放,默认的主题名称是Default,框架的默认视图文件后缀是.html。 可以在每个应用的system配置中使用“default_theme”配置默认模板主题:
//默认模板主题配置
default_theme="Default";
如果配置default_theme的值为“/”,将不使用模板风格:
//不使用模板主题
default_theme="/";
二、模板的赋值
在模板中输出变量,需要在控制器中将变量传入模板中,系统提供了assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值。
// 模板变量赋值
$this->assign('name',$value);
// 下面的写法是等效的
$this->name = $value;
assign方法必须在模板渲染的display和show方法之前调用,并且系统只会输出设定的变量,其它变量不会输出(系统变量例外),一定程度上保证了变量的安全性。
如果要同时输出多个模板变量,可以使用下面的方式:
$array['name'] = 'liming';
$array['email'] = 'liming@gmail.com';
$array['mobile'] = '123356789999';
$this->assign($array);
这样,就可以在模板文件中同时输出name、email和mobile三个变量。
模板变量变量赋值之后,就可以使用{$name}、{$email}、{$mobile}在模板中输出了
三、模板的渲染
模板定义后就可以渲染模板输出,系统也支持直接渲染内容输出,模板赋值必须在模板渲染之前操作。 渲染模板输出最常用的是使用display方法,在控制器中的调用格式:
//在控制器中的调用方式
$this->display('[模板文件]'[,'字符编码'][,'输出类型'])
模板文件的写法支持下面几种:
用法 | 描述 |
不带任何参数 | 自动定位当前操作的模板文件 |
[控制器/][操作][@主题名称][:应用名称] | 常用写法,支持跨模块 模板主题可以和theme方法配合 |
完整的模板文件名 | 直接使用完整的模板文件名(包括模板后缀) |
下面是一个最典型的用法,不带任何参数:
// 不带任何参数 自动定位当前操作的模板文件
$this->display();
表示系统会按照默认规则自动定位模板文件,其规则是:
如果当前没有启用模板主题则定位到:当前模块/默认视图目录/当前控制器/当前操作.html
如果有启用模板主题则定位到:当前模块/默认视图目录/当前主题/当前控制器/当前操作.html
如果没有按照模板定义规则来定义模板文件(或者需要调用其他控制器下面的某个模板),可以使用:
// 指定模板输出
$this->display('edit');
表示调用当前模块下面的edit模板
$this->display('Member/read');
表示调用Member模块下面的read模板。
如果我们使用了模板主题功能,那么也可以支持跨主题调用,使用:
$this->display('User/edit@blue');
如果指定的主题下的模板文件不存在,自动使用默认主题的对应的文件。
display方法支持在渲染输出的时候指定输出编码和类型,例如,可以指定编码和类型:
$this->display('read', 'utf-8', 'text/xml');
表示输出XML页面类型(配合你的应用需求可以输出很多类型)。
如果的模板目录是自定义的,或者根本不需要按模块进行分目录存放,那么默认的display渲染规则就不能处理,这个时候,我们就需要使用另外一种方式来应对,直接传入模板文件名即可,例如:
$this->display('./Template/Public/menu.html');
注意此时主要模板文件的路径是相对于应用的根目录。
四、获取模板文件内容
如果需要获取渲染模板的输出内容而不是直接输出,可以使用fetch方法。
fetch方法的用法和display基本一致(只是不需要指定输出编码和输出类型):
fetch(‘模板文件’)
模板文件的调用方法和display方法完全一样,区别就在于fetch方法渲染后不是直接输出,而是返回渲染后的内容,例如:
$content = $this->fetch('User/add');
使用fetch方法获取渲染内容后,你可以进行过滤和替换等操作,或者用于对输出的复杂需求。
五、渲染内容
如果你没有定义任何模板文件,或者把模板内容存储到数据库中的话,你就需要使用show方法来渲染输出了,show方法的调用格式:
show(‘渲染内容’[,’字符编码’][,’输出类型’])
例如:
$this->show($content);
也可以指定编码和类型:
$this->show($content, 'utf-8', 'text/xml');
show方法中的内容也可以支持模板解析。
- 上一条
- 下一条