您的位置:首页 > 其它

SmartTemplate 实例分析——基本语法[basic]之Iterating_Blocks

2009-01-12 02:10 666 查看
SmartTemplate 1.2.1 官方源文件 可以从http://download.csdn.net/source/670995下载

本系列文章中的实例代码可以到我的资源http://download.csdn.net/source/670977下载
以前学东西都是东一块西一块的,现在正好有时间,学点东西,同时也做一下记录,以便备忘,也希望可以帮到学习SmartTemplate 的同学,初学,文中难免有纰漏,如有错误或不同意见,希望可以跟我联系
lxbin544930@163.com,我会及时更正,共勉。

6. Iterating_Blocks

【Content】basic/Iterating_Blocks.php:

<?php

require_once "../config/smarttemplate_basic.cfg.php";

$users  =  array(
array(
'FIRSTNAME' => 'John',
'LASTNAME'  => 'Doe',
),
array(
'FIRSTNAME' => 'Roger',
'LASTNAME'  => 'Rabbit',
),
);

$page = new SmartTemplate("Iterating_Blocks.html");
$page->assign('users',  $users );
$page->output();

?>

【Template】templates/basic/Iterating_Blocks.html:
<HTML>
<TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0">

<!-- BEGIN users -->
<TR>
<TD> {FIRSTNAME} </TD>
<TD> {LASTNAME}  </TD>
</TR>
<!-- END users -->

</TABLE>
</HTML>

【Return】

<HTML>
<TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0">

<TR>
<TD> John </TD>
<TD> Doe  </TD>
</TR>
<TR>
<TD> Roger </TD>
<TD> Rabbit  </TD>
</TR>

</TABLE>
</HTML>

【效果图】



【琐记】

这是一个在模板中使用<!-- BEGIN 变量 --><!-- END 变量 -->来表现迭代数据块的例子,其实算是BEGIN END的最简单的应用,应该放到Alternating_Colors之前的,但是既然已经在Alternating_Colors篇里啰嗦了那许多了,这篇参考Alternating_Colors里好了,偷懒一下。。。SmartTemplate 实例分析——基本语法[basic]之DropDown_Boxes

至此,官方模板Basic文件夹的6个基本示例基本讲解完毕。SmartTemplate模板的使用非常的简单明了,如果你已经爱上它了,那么,继续爱吧。。

【附录】

include/class.smarttemplateparser.php中解析<!-- BEGIN 变量-->.....<!-- END 变量-->的PHP代码(不做解释,仅供参考,方便理解和查阅)
//	'BEGIN - END' Blocks
if (preg_match_all('/<!-- BEGIN ([a-zA-Z0-9_.]+) -->/', $page, $var))
{
foreach ($var[1] as $tag)
{
list($parent, $block)  =  $this->var_name($tag);
$code  =  "<?php/n"
. "if (!empty(/$$parent"."['$block'])){/n"
. "if (!is_array(/$$parent"."['$block']))/n"
. "/$$parent"."['$block']=array(array('$block'=>/$$parent"."['$block']));/n"
. "/$_tmp_arr_keys=array_keys(/$$parent"."['$block']);/n"
. "if (/$_tmp_arr_keys[0]!='0')/n"
. "/$$parent"."['$block']=array(0=>/$$parent"."['$block']);/n"
. "/$_stack[/$_stack_cnt++]=/$_obj;/n"
. "foreach (/$$parent"."['$block'] as /$rowcnt=>/$$block) {/n"
. "/$$block"."['ROWCNT']=/$rowcnt;/n"
. "/$$block"."['ALTROW']=/$rowcnt%2;/n"
. "/$$block"."['ROWBIT']=/$rowcnt%2;/n"
. "/$_obj=&/$$block;/n?>";
$page  =  str_replace("<!-- BEGIN $tag -->",  $code,  $page);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: