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:
- <?php
- require_once "../config/smarttemplate_basic.cfg.php";
- for ($row = 0; $row < 3; $row++) {
- for ($col = 0; $col < 6; $col++) {
- $text = "Cell $col/$row";
- $table["row"][$row]["column"][$col]["CELL"] = $text;
- }
- }
- $page = new SmartTemplate("Nested_Blocks.html");
- $page->assign($table);
- $page->output();
- ?>
【Template】templates/basic/Nested_Blocks.html:
- <HTML>
- <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0">
- <!-- BEGIN row -->
- <TR>
- <!-- BEGIN column -->
- <TD> {CELL} </TD>
- <!-- END column -->
- </TR>
- <!-- END row -->
- </TABLE>
- </HTML>
【Return】
- <HTML>
- <TABLE BORDER="1" CELLPADDING="2" CELLSPACING="0">
- <TR>
- <TD> Cell 0/0 </TD>
- <TD> Cell 1/0 </TD>
- <TD> Cell 2/0 </TD>
- <TD> Cell 3/0 </TD>
- <TD> Cell 4/0 </TD>
- <TD> Cell 5/0 </TD>
- </TR>
- <TR>
- <TD> Cell 0/1 </TD>
- <TD> Cell 1/1 </TD>
- <TD> Cell 2/1 </TD>
- <TD> Cell 3/1 </TD>
- <TD> Cell 4/1 </TD>
- <TD> Cell 5/1 </TD>
- </TR>
- <TR>
- <TD> Cell 0/2 </TD>
- <TD> Cell 1/2 </TD>
- <TD> Cell 2/2 </TD>
- <TD> Cell 3/2 </TD>
- <TD> Cell 4/2 </TD>
- <TD> Cell 5/2 </TD>
- </TR>
- </TABLE>
- </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代码(不做解释,仅供参考,方便理解和查阅)
- /**
- * Assign Template Content
- *
- * Usage Example:
- * $page->assign( 'TITLE', 'My Document Title' );
- * $page->assign( 'userlist', array(
- * array( 'ID' => 123, 'NAME' => 'John Doe' ),
- * array( 'ID' => 124, 'NAME' => 'Jack Doe' ),
- * );
- *
- * @access public
- * @param string $name Parameter Name
- * @param mixed $value Parameter Value
- * @desc Assign Template Content
- */
- function assign ( $name, $value = '' )
- {
- if (is_array($name))
- {
- foreach ($name as $k => $v)
- {
- $this->data[$k] = $v;
- }
- }
- else
- {
- $this->data[$name] = $value;
- }
- }
明日任务:SmartTemplate 实例分析——基本语法[basic]之Special_Characters(这是一个在模板中使用HTML中的'<','>'等特殊字符的例子,但是变量中出现中文的时候output出来会有乱码,该Blog同时会给出解决方案)