以前用习惯了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的思想 ,
还是的确是开发人员的疏忽
竟然找不到模板嵌套的方法
于是尝试着看了一下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的思想 ,
还是的确是开发人员的疏忽