The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 包含子模板 ]

我们在前面看到过include标签加载模板,不过那个变量可以传递到我们的模板,这即方便又容易引起安全性问题。于是,系统提供了提供了另一种子模板标签d*include。

1:废话不多说,我们在模板中写下如下的代码:

  1. <assign name='var3' value='我是第三个变量的值' />   
  2. <d*include file="index+header" assign.var1="'我是一个传递的变量'" assign.var2="'我是另一个传递的变量'" />   
  3. 我是主模板,I was wait to see the sub template ( index_header.html ) to come here !  


因为 file+header表示加载当前主题的下的index 模块的header 模板,即index_header.html。

如图:

然后我们在index_header.html 模板文件加入如下的代码:

  1. 我是被调用的头部模板,我能够获取传递给我的两个变量的值:<br>   
  2. <font color="green">$var1 : {$var1}<br>   
  3. <font color="green">$var2 : {$var2}<br>   
  4. <font color="red">$var3( 这个变量并没有被赋值,导致异常 ) : {$var3}<br>   
  5. --------------------  


程序运行后的主模板编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 06:52:13  */ ?>   
  2. <?php $var3 = '我是第三个变量的值'; ?>   
  3. <?php $oTemplate665 = new TemplateHtml() ;$oTemplate665->setVar('var1','我是一个传递的变量') ;$oTemplate665->setVar('var2','我是另一个传递的变量') ;$oTemplate665->display('index+header','utf-8','text/html',false,255 ) ; ?>   
  4. 我是主模板,I was wait to see the sub template ( index_header.html ) to come here !  

如图:


头部模板运行后的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-15 06:52:13  */ ?>   
  2. 我是被调用的头部模板,我能够获取传递给我的两个变量的值:<br>   
  3. <font color="green">$var1 : <?php echo( $var1 ); ?><br>   
  4. <font color="green">$var2 : <?php echo( $var2 ); ?><br>   
  5. <font color="red">$var3( 这个变量并没有被赋值,导致异常 ) : <?php echo( $var3 ); ?><br>   
  6. --------------------  

如图:

程序输出结果如下:

  1. 我是被调用的头部模板,我能够获取传递给我的两个变量的值:   
  2. $var1 : 我是一个传递的变量   
  3. $var2 : 我是另一个传递的变量   
  4. $var3( 这个变量并没有被赋值,导致异常 ) :   
  5. DoYouHaoBaby Exception系统消息   
  6.   
  7. [8] Undefined variable: var3 index_header.html.compiled.php 第 5 行。   
  8. [重试] [返回主页] [返回首页]  


如图:

分析:从运行结果来看,你发现使用这种方式来加载模板,变量必须通过语法中标签的赋值属性才能够传递到模板中。比如,我们模板前面两个变量都成功传递过去了。但是第三个值没有传递过去,直接使用,系统自动抛出异常。


2:注意事项

file属性的载入模板的路径定义和include基本一致,可以参考include标签的定义。d*include中的d*只是为了不与include标签冲突而设置的。

  1. 支持完整路径
  2. 主题名@(分组:)模块名+操作名
  3. 条件表达式(当然变量也在其中)