php的Smarty中实现模板嵌套的方法(转)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值