3. <{$var }> <!-- 启始的标示符号和结束的标示符号不在同一行 --> 在 Smarty 里,变量预设是全域的,也就是说你只要指定一次就好了。指定两次以上的话,变量内容会以最后指定的为主。就算我们在主模版中加载了外部的子模版,子模版中同样的变量一样也会被替代,这样我们就不用再针对子模版再做一次解析的动作。 而在 PHP 程序中,我们用 Smarty 的 assign 来将变量置放到模版中。 assign 的用法官方手册中已经写得很多了,用法就如同上一节的范例所示。不过在重复区块时,我们就必须将变量做一些手脚后,才能将变量 assign 到模版中,这在下一章再提。 修饰你的变量 上面我们提到 Smarty 变量呈现的风貌是由模版自行决定的,所以 Smarty 提供了许多修饰变量的函式。使用的方法如下: <{变量修饰函式}> <!-- 当修饰函式没有参数时 --> <{变量修饰函式:"参数(非必要,视函式而定)"}> <!-- 当修饰函式有参数时 --> 范例如下: <{$varnl2br}> <!-- 将变量中的换行字符换成 <br /> --> <{$varstring_format:"%02d"}> <!-- 将变量格式化 --> 好,那为什么要让模版自行决定变量呈现的风貌?先看看底下的 HTML ,这是某个购物车结帐的部份画面。 <input name="total" type="hidden" value="21000" /> 总金额:21,000 元 一般模版引擎的模版可能会这样写: <input name="total" type="hidden" value="{total}" /> 总金额:{format_total} 元 它们的 PHP 程序中要这样写: <?php $total = 21000; $tpl->assign("total", $total); $tpl->assign("format_total", number_format($total)); ?> 而 Smarty 的模版就可以这样写: (number_format 修饰函式请到Smarty 官方网页下载) <input name="total" type="hidden" value="<{$total}>" /> 总金额:<{$totalnumber_format:""}> 元 Smarty 的 PHP 程序中只要这样写: <?php $total = 21000; $tpl->assign("total", $total); ?> 所以在 Smarty 中我们只要指定一次变量,剩下的交给模版自行决定即可。这样了解了吗?这就是让模版自行决定变量呈现风貌的好处! 控制模版的内容 重复的区块 在 Smarty 样板中,我们要重复一个区块有两种方式: foreach 及 section 。而在程序中我们则要 assign 一个数组,这个数组中可以包含数组数组。就像下面这个例子: 首先我们来看 PHP 程序是如何写的: test2.php: <?php require "main.php"; $array1 = array(1 => "苹果", 2 => "菠萝", 3 => "香蕉", 4 => "芭乐"); $tpl->assign("array1", $array1); $array2 = array( array("index1" => "data1-1", "index2" => "data1-2", "index3" => "data1-3"), array("index1" => "data2-1", "index2" => "data2-2", "index3" => "data2-3"), array("index1" => "data3-1", "index2" => "data3-2", "index3" => "data3-3"), array("index1" => "data4-1", "index2" => "data4-2", "index3" => "data4-3"), array("index1" => "data5-1", "index2" => "data5-2", "index3" => "data5-3")); $tpl->assign("array2", $array2); $tpl->display("test2.htm"); ?> 而模版的写法如下:
上一篇:PHP5的异常处理机制之使用throw关键字
下一篇:分页显示详解(with php)
|