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

SmartTemplate 1.2.1 官方源文件 可以从http://download.csdn.net/source/670995下载

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

3. Nested_Blocks

【Content】basic/Nested_Blocks.php:

  1. <?php
  2.     require_once "../config/smarttemplate_basic.cfg.php";
  3.     for ($row = 0;  $row < 3;  $row++) {
  4.         for ($col = 0;  $col < 6;  $col++) {
  5.             $text  =  "Cell $col/$row";
  6.             $table["row"][$row]["column"][$col]["CELL"] = $text;
  7.         }
  8.     }
  9.     $page = new SmartTemplate("Nested_Blocks.html");
  10.     $page->assign($table);
  11.     $page->output();
  12. ?>

【Template】templates/basic/Nested_Blocks.html:

  1. <HTML>
  2. <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0">
  3. <!-- BEGIN row -->
  4. <TR>
  5.     <!-- BEGIN column -->
  6.     <TD> {CELL} </TD>
  7.     <!-- END column -->
  8. </TR>
  9. <!-- END row -->
  10. </TABLE>
  11. </HTML>

【Return】

  1. <HTML>
  2. <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0">
  3. <TR>
  4.         <TD> Cell 0/0 </TD>
  5.         <TD> Cell 1/0 </TD>
  6.         <TD> Cell 2/0 </TD>
  7.         <TD> Cell 3/0 </TD>
  8.         <TD> Cell 4/0 </TD>
  9.         <TD> Cell 5/0 </TD>
  10.      
  11. </TR>
  12. <TR>
  13.         <TD> Cell 0/1 </TD>
  14.         <TD> Cell 1/1 </TD>
  15.         <TD> Cell 2/1 </TD>
  16.         <TD> Cell 3/1 </TD>
  17.         <TD> Cell 4/1 </TD>
  18.         <TD> Cell 5/1 </TD>
  19.      
  20. </TR>
  21. <TR>
  22.         <TD> Cell 0/2 </TD>
  23.         <TD> Cell 1/2 </TD>
  24.         <TD> Cell 2/2 </TD>
  25.         <TD> Cell 3/2 </TD>
  26.         <TD> Cell 4/2 </TD>
  27.         <TD> Cell 5/2 </TD>
  28.      
  29. </TR>
  30. </TABLE>
  31. </HTML>

【效果图】

【琐记】

关于<!-- BEGIN 变量 -->.....<!-- END 变量 -->的用法和说明在上篇Blog里已经涉及到,这里不再赘述。官方给出这个<!-- BEGIN 变量 -->.....<!-- END 变量 -->嵌套的例子,我想其用意应该是告诉我们BEGIN END语法也可以这样嵌套使用吧。如果你有需要可以嵌套两层,三层或者更多,不过三层已经很复杂了吧。

我看这个例子的时候有个疑问,就是basic/Nested_Blocks.php里的赋值替换语句怎么是$page->assign($table);而不是之前的$page->assign($name,$value)呢?看PHP代码的时候遇到不懂的函数最快最有效的方法就是索引PHP手册,同样的在使用SmartTemplate的时候如果哪里有疑问,最好还是去从根源也就是功能实现代码上找,附录里我给出了function assign ( $name, $value = '' )的PHP源代码,虽然它算不上根本的根本,应该对大家的理解也略有帮助。

简单的讲如果是$page->assign($name,$value)这样,模板类会将Template页中的{$name}替换为$value;如果是$page->assign($name)这样,要保证php页中的$name是array才可以这样用,拿Nested_Blocks为例,模板类会将Template页中的{CELL}替换为$name["row"][$row]["column"][$col]["CELL"]的值,仍然虽然这样看起来不是很习惯,但是它依然遵循的一个规则还是按KEY入座,这一点,查看附录中的函数源代码会明白很多。

这个嵌套的例子可能不会一下子就看明白,多看几遍basic/Nested_Blocks.php和tempaltes/basic/Nested_Blocks.html会一点点明白的。

【附录】
include/class.smarttemplateparser.php中function assign ( $name, $value = '' )的PHP代码(不做解释,仅供参考,方便理解和查阅)

  1.         /**
  2.         * Assign Template Content
  3.         *
  4.         * Usage Example:
  5.         * $page->assign( 'TITLE',     'My Document Title' );
  6.         * $page->assign( 'userlist',  array(
  7.         *                                 array( 'ID' => 123,  'NAME' => 'John Doe' ),
  8.         *                                 array( 'ID' => 124,  'NAME' => 'Jack Doe' ),
  9.         *                             );
  10.         *
  11.         * @access public
  12.         * @param string $name Parameter Name
  13.         * @param mixed $value Parameter Value
  14.         * @desc Assign Template Content
  15.         */
  16.         function assign ( $name, $value = '' )
  17.         {
  18.             if (is_array($name))
  19.             {
  20.                 foreach ($name as $k => $v)
  21.                 {
  22.                     $this->data[$k]  =  $v;
  23.                 }
  24.             }
  25.             else
  26.             {
  27.                 $this->data[$name]  =  $value;
  28.             }
  29.         }

明日任务:SmartTemplate 实例分析——基本语法[basic]之Special_Characters(这是一个在模板中使用HTML中的'<','>'等特殊字符的例子,但是变量中出现中文的时候output出来会有乱码,该Blog同时会给出解决方案)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值