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