Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
可以使用Include标签来包含外部的模板文件,使用方法如下:
格式:
- <include file="完整模板文件名" />
说明:这种情况下,模板文件名必须包含后缀。使用完整文件名包含的时候,特别要注意文件包含指的
是服务器端包含,而不是包含一个URL地址,也就是说file参数的写法是服务器端的路径。而且
DoYouHaoBaby不支持相对路径,必须使用物理路径来包含。系统提供了系统常量路径定义,你可以方便地使
用。关于系统常量路径定义,我们后面会为你介绍,或者你也可以参考后面的附录。
下面我们测试一下子,首先我们在主模板文件中写入如下的代码:
- {~$sTestHead = DT.'/Test/header.html' }
- <include file="$sTestHead">
- “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为
- 你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。
- 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,然后我们在里面加上如下的代码:
- <b>DoYouHaoBaby 提示你:</b><br>
- <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font>
如图:


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

程序运行后,header.html的编译PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 14:47:29 */ ?>
- <b>DoYouHaoBaby 提示你:</b><br>
- <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font>
如图:

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


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

接下来,我们为模板写入变量,我们看看主模板的变量是否能够传递到子模板中去。
首先,我们在主模板的控制器中写下如下的代码:
- $sHeader = '头部变量的值:“泡泡网”、“汽车之家”CEO李想说了一句话,很给力。哦,那你能说说,到底是什么样的一句话吗?我啊,我不告诉你,请你关注DoYouHaoBaby ,答案即可揭晓!';
- $sHeSays = '李想说的话:"一个人如果到了20岁都还不清楚自己的性格和立场到底是什么,那挺可怕的",给力吧。';
- $this->assign('sHeader',$sHeader);
- $this->assign('sHeSays',sHeSays);
- $this->display();
如图:

然后,我们修改主模板和头部模板中的代码分别为:
主模板:
- {~$sTestHead = DT.'/Test/header.html' }
- <include file="$sTestHead"><br>
- “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。
- DoYouHaoBaby will to be the next ?<br><br>
- ----------- 李想说的话 -----------<br>
- {$sHeSays}<br>
- ----------- end say --------------
头部模板:
- <b>DoYouHaoBaby 提示你:</b><br>
- <font color="red">我是一个被包含的头部,我的颜色是红色的,注意哦!</font><br><br>
- ----------------- 李想说 -------------------<br>
- {$sHeader}<br>
- --------------- end header -----------------
编译后的PHP 代码分别为:
主模板:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:06:04 */ ?>
- <?php $sTestHead = DT.'/Test/header.html' ; ?>
- <?php $this->includeChildTemplate( $sTestHead ,"" ,"" ,"" ) ;?><br>
- “Discuz”创始人戴志康:“年轻意味着你有更多的时间去补救过错,但反过来讲,市场竞争不会因为你年轻就宽容你,你犯错误别人不犯,你可能就死掉了”。
- DoYouHaoBaby will to be the next ?<br><br>
- ----------- 李想说的话 -----------<br>
- <?php echo( $sHeSays ); ?><br>
- ----------- end say --------------
如图:

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

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

分析得出结论:程序如果通过include标签来加载模板的话,那么主模板的变量可以通过模板传递给子模板,即主模板的变量可以直接在子模板中使用。
格式:
- <include file="文件名" />
例如 导入当前主题下面的test.html:
- <include file="test" />
编译后的PHP 代码为:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:48:18 */ ?>
- <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Default/test.html" ,"" ,"" ,"" ) ;?>
如图:

格式:
- <include file="模块名+操作名" />
模板和操作名之间的分隔符可以自定义,系统默认为 '_',你可以通过应用配置文件修改(Conf/Config.php) :
- 'DO_NOTHING_DEPR'=>'/'
如果你在配置文件修改的话,那么模块和操作之间通过文件夹的方式分割,模块是文件夹,操作是每一个文件。同时,为了降低目录深度,系统默认使用‘_’,这样子也比较直观。
例如,包含Public模块的header操作方法,我们可以在模板文件中使用如下的代码:
- <include file="Pulic+header" />
程序编译后的PHP 代码如下:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 15:58:20 */ ?>
- <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Default/Pulic_header.html" ,"" ,"" ,"" ) ;?>
如图:

格式:
- <include file="主题名@(分组:)模块名+操作名" />
例如,包含blue主题的User模块的read操作模版:
- <include file="Blue@User+read" />
程序运行后的PHP 编译代码:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:21:36 */ ?>
- <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Blue/User_read.html" ,"" ,"" ,"" ) ;?>
如图:

如果你要包含blue主题的Test分组的User模块的read操作模版:
- <include file="Blue@Test:User+read" />
程序运行后的PHP 编译代码:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:24:37 */ ?>
- <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Blue/Test/User_read.html" ,"" ,"" ,"" ) ;?>
如图:

格式:
- <include file="$变量名" />
例如
- <include file="$sTplName" />
给$sTplName赋不同的值就可以包含不同的模板文件,变量的值的用户在开始的演示中我们已经为你展示了。
注意:include标签不支持类似的语法,例如:
- <include file="{$hello}" />
程序运行编译后:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:30:47 */ ?>
- <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Default/__##TemplateHtmlRevertParser##START##22476196/PD9waHAgZWNobyggJGhlbGxvICk7ID8_##END##TemplateHtmlRevertParser##__.html" ,"" ,"" ,"" ) ;?>
如图:

格式:
- {include:模板文件规则}
其中的模板文件规则可以使用上面提到的5种方式。
例如,包含blue主题的User模块的read操作模版:
- {include Blue@User+read}
代码运行后的PHP 编译代码:
- <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-10 16:34:28 */ ?>
- <?php $this->includeChildTemplate( "D:/phpcondition/htdocs/doyouhaobaby/TestApp/Tpl/Blue/User_read.html" ) ;?>
如图:

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