以前用习惯了fasttemplate
,
突然接触smarty
,
竟然找不到模板嵌套的方法
于是尝试着看了一下smarty的源码
,
发现其实很好办
在Smarty
.
class
.
php中有这样一个方法 fetch
function
fetch(
$resource_name
,
$cache_id
=
null
,
$compile_id
=
null
,
$display
=
false
)
他的作用是得到模板文件最终显示在浏览器上的html代码
再看assign方法的代码
function
assign(
$tpl_var
,
$value
=
null
)
{
if
(
is_array
(
$tpl_var
)){
foreach
(
$tpl_var
as
$key
=>
$val
) {
if
(
$key
!=
''
) {
$this
->
_tpl_vars[
$key
]
=
$val
;
}
}
}
else
{
if
(
$tpl_var
!=
''
)
$this
->
_tpl_vars[
$tpl_var
]
=
$value
;
}
}
从代码中可以看出
,
它将每一个smarty标签的值都存在了
$this
->
_tpl_vars这样一个数组中
,
于是仿照之
,
自己添加这样一个方法
/*
*
* 模板嵌套的方法
*
* @param unknown_type $tpl_var
* @param unknown_type $resource_name
* @author VioletElegy
*/
function
parse(
$tpl_var
,
$resource_name
) {
$this
->
_tpl_vars[
$tpl_var
]
=
$this
->
fetch(
$resource_name
);
}
这个parse方法使用的时候只需象如下这样
$smarrty
->
parse(
"
index
"
,
"
qiantao.tpl
"
);
这样
,
原来模板文件中的{
$index
}标签就被qiantao
.
tpl模板代替了
,
注意
,
qiantao
.
tpl文件中的标签必须在调用parse方法之前赋值
最后调用display方法的时候就全显示出来了
这样就在smarty中很轻松的实现象fasttemplate的嵌套
令我不解的是
,
smarty的机制允许模板嵌套但是它只是没有提供这样一个接口
于是我就很困惑是我看教材
,
看代码不够仔细
,
还是受到fasttemplate
,
以及其他模板解决方案的影响过重而没有理解smarty的思想
,
还是的确是开发人员的疏忽





















































