以前用习惯了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的思想, 还是的确是开发人员的疏忽
|