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

可以使用Include标签来包含外部的模板文件,使用方法如下:

1、 使用完整文件名包含

 
格式:
  1. <include file="完整模板文件名" />  

说明:这种情况下,模板文件名必须包含后缀。使用完整文件名包含的时候,特别要注意文件包含指的

是服务器端包含,而不是包含一个URL地址,也就是说file参数的写法是服务器端的路径。而且

DoYouHaoBaby不支持相对路径,必须使用物理路径来包含。系统提供了系统常量路径定义,你可以方便地使

用。关于系统常量路径定义 ,我们后面会为你介绍,或者你也可以参考后面的附录。


下面我们测试一下子,首先我们在主模板文件中写入如下的代码:

  1. {~$sTestHead = DT.'/Test/header.html' }   
  2. <include file="$sTestHead">   
  3. “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为   
  4.   
  5. 你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。   
  6.   
  7. DoYouHaoBaby will to be the next ?  

如图:


分析说明:DT使我们系统定义了模板文件目录的物理路径,比如我开发的环境下,这个值为
D:\phpcondition\htdocs\doyouhaobaby\TestApp\Tpl\Default

这个路径,末尾不带‘/’或者 '\',你可以看出这是我们项目的当前模板所在目录的物理路径。这里,

系统的默认主题为Default。根据代码的要求,我们需要在Default目录下面新建一个Test目录,并在里

面放上一个header.html的文件。如果,我们没有放置这个文件,那么模板中就会蹦出一大块橘红色的异

常提示。如图(我们定义了一个header123.html,这个是错误的) :

接下来,我们将header123.html改成header.html,然后我们在里面加上如下的代码:

  1. <b>DoYouHaoBaby 提示你:</b><br>   
  2. <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font>  

如图:

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

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 14:20:09  */ ?>   
  2. <?php $sTestHead = DT.'/Test/header.html' ; ?>   
  3. <?php $this->includeChildTemplate( $sTestHead ,"" ,"" ,"" )  ;?>   
  4. “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。   
  5.   
  6. DoYouHaoBaby will to be the next ?  


如图:

程序运行后,header.html的编译PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 14:47:29  */ ?>   
  2. <b>DoYouHaoBaby 提示你:</b><br>   
  3. <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font>  


如图:

这个时候,我们发现,在我们的项目编译目录里面存在两个文件,编译目录的目录和我们模板中的相对模板保持一致。

如图:

程序运行结果如下;

  1. DoYouHaoBaby 提示你:   
  2.  我是一个被包含的头部,我的颜色是红色的,注意哦!“Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。 DoYouHaoBaby will to be the next ?  

如图:

接下来,我们为模板写入变量,我们看看主模板的变量是否能够传递到子模板中去。
首先,我们在主模板的控制器中写下如下的代码:

  1. $sHeader = '头部变量的值:“泡泡网”、“汽车之家”CEO李想说了一句话,很给力。哦,那你能说说,到底是什么样的一句话吗?我啊,我不告诉你,请你关注DoYouHaoBaby ,答案即可揭晓!';   
  2.   
  3. $sHeSays = '李想说的话:"一个人如果到了20岁都还不清楚自己的性格和立场到底是什么,那挺可怕的",给力吧。';   
  4.   
  5. $this->assign('sHeader',$sHeader);   
  6. $this->assign('sHeSays',sHeSays);   
  7. $this->display();  

如图:

然后,我们修改主模板和头部模板中的代码分别为:

主模板:

  1. {~$sTestHead = DT.'/Test/header.html' }   
  2. <include file="$sTestHead"><br>   
  3. “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。   
  4.   
  5. DoYouHaoBaby will to be the next ?<br><br>   
  6. ----------- 李想说的话 -----------<br>   
  7. {$sHeSays}<br>   
  8. ----------- end say --------------  

头部模板:

  1. <b>DoYouHaoBaby 提示你:</b><br>   
  2. <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font><br><br>   
  3. ----------------- 李想说 -------------------<br>   
  4. {$sHeader}<br>   
  5. --------------- end header -----------------  


编译后的PHP 代码分别为:
主模板:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:06:04  */ ?>   
  2. <?php $sTestHead = DT.'/Test/header.html' ; ?>   
  3. <?php $this->includeChildTemplate( $sTestHead ,"" ,"" ,"" )  ;?><br>   
  4. “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。   
  5.   
  6. DoYouHaoBaby will to be the next ?<br><br>   
  7. ----------- 李想说的话 -----------<br>   
  8. <?php echo( $sHeSays ); ?><br>   
  9. ----------- end say --------------  

如图:

头部模板:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:05:37  */ ?>   
  2. <b>DoYouHaoBaby 提示你:</b><br>   
  3. <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font><br><br>   
  4. ----------------- 李想说 -------------------<br>   
  5. <?php echo( $sHeader ); ?><br>   
  6. --------------- end header -----------------  

如图:


运行结果如下:

  1. DoYouHaoBaby 提示你:   
  2.  我是一个被包含的头部,我的颜色是红色的,注意哦!   
  3.   
  4.  ----------------- 李想说 -------------------   
  5.  头部变量的值:“泡泡网”、“汽车之家”CEO李想说了一句话,很给力。哦,那你能说说,到底是什么样的一句话吗?我啊,我不告诉你,请你关注DoYouHaoBaby ,答案即可揭晓!   
  6.  --------------- end header -----------------   
  7.  “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。 DoYouHaoBaby will to be the next ?   
  8.   
  9.  ----------- 李想说的话 -----------   
  10.  李想说的话:"一个人如果到了20岁都还不清楚自己的性格和立场到底是什么,那挺可怕的",给力吧。   
  11.  ----------- end say --------------  

如图:

分析得出结论:程序如果通过include标签来加载模板的话,那么主模板的变量可以通过模板传递给子模板,即主模板的变量可以直接在子模板中使用。


2、包含当前主题下的模板文件

 
格式:
  1. <include file="文件名" />  

 
例如 导入当前主题下面的test.html:
  1. <include file="test" />  

编译后的PHP 代码为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:48:18  */ ?>   
  2. <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Default/test.html" ,"" ,"" ,"" )  ;?>  

如图:


3、 包含其他模块的操作模板

 
格式:
  1. <include file="模块名+操作名" />  

 
模板和操作名之间的分隔符可以自定义,系统默认为 '_',你可以通过应用配置文件修改(Conf/Config.php) :
  1. 'DO_NOTHING_DEPR'=>'/'  

如果你在配置文件修改的话,那么模块和操作之间通过文件夹的方式分割,模块是文件夹,操作是每一个文件。同时,为了降低目录深度,系统默认使用‘_’,这样子也比较直观。

例如,包含Public模块的header操作方法,我们可以在模板文件中使用如下的代码:

  1. <include file="Pulic+header" />  

程序编译后的PHP 代码如下:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:58:20  */ ?>   
  2. <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Default/Pulic_header.html" ,"" ,"" ,"" )  ;?>  

如图:

4、包含其他模板主题的模块操作模板,支持分组,分组可以没有:

 
格式:
  1. <include file="主题名@(分组:)模块名+操作名" />  

 
例如,包含blue主题的User模块的read操作模版:
  1. <include file="Blue@User+read" />  


程序运行后的PHP 编译代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:21:36  */ ?>   
  2. <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Blue/User_read.html" ,"" ,"" ,"" )  ;?>  


如图:

如果你要包含blue主题的Test分组的User模块的read操作模版:

  1. <include file="Blue@Test:User+read" />  

程序运行后的PHP 编译代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:24:37  */ ?>   
  2. <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Blue/Test/User_read.html" ,"" ,"" ,"" )  ;?>  


如图:


5、 用变量控制要导入的模版

 
格式:
  1. <include file="$变量名" />  

 
例如

  1. <include file="$sTplName" />   

给$sTplName赋不同的值就可以包含不同的模板文件,变量的值的用户在开始的演示中我们已经为你展示了。

注意:include标签不支持类似的语法,例如:

  1. <include file="{$hello}" />  

程序运行编译后:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:30:47  */ ?>   
  2. <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Default/__##TemplateHtmlRevertParser##START##22476196/PD9waHAgZWNobyggJGhlbGxvICk7ID8_##END##TemplateHtmlRevertParser##__.html" ,"" ,"" ,"" )  ;?>  


如图:

6、使用快捷方式包含文件(Code代码方式)

 
格式:

  1. {include:模板文件规则}  

 
其中的模板文件规则可以使用上面提到的5种方式。
 
例如,包含blue主题的User模块的read操作模版:
  1. {include Blue@User+read}  

代码运行后的PHP 编译代码:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:34:28  */ ?>   
  2. <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Blue/User_read.html" )  ;?>  

如图:

注意:如果外部模板有所更改,模板引擎会像主模板一样重新编译模板,所以你不用担心子模板是否更新。但是,因为include的标签,主模板采用的是物理路径加载的,所有,如果你迁移项目。请务必删除主模板文件缓存(或者叫做模板文件编译),以便生成正确的物理地址。当然一个个删除主模板很麻烦,我们建议迁移项目的时候把模块的缓存目录清空,然后运行,系统会再次生成新的缓存文件(或叫做编译文件),然后一切就都OK了。