php的Smarty中实现模板嵌套
2022-10-29 18:24:05竟然找不到模板嵌套的方法
于是尝试着看了一下smarty的源码,发现其实很好办
在Smarty.class.php中有这样一个方法 f
以前用习惯了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的思想, 还是的确是开发人员的疏忽