if 语法一般的应用可以参照官方使用说明,所以笔者在这里就不详加介绍了。不过笔者发现了一个有趣的应用:常常会看到程序里要产生这样的一个表格: (数字代表的是资料集的顺序) 1 2 3 4 5 6 7 8
这个笔者称之为「横向重复表格」。它的特色和传统的纵向重复不同,前几节我们看到的重复表格都是从上而下,一列只有一笔资料。而横向重复表格则可以横向地在一列中产生 n 笔资料后,再换下一列,直到整个循环结束。要达到这样的功能,最简单的方式只需要 section 和 if 搭配即可。
我们来看看下面这个例子:
test4.php:
require \$my_array = array(
array(\
array(\ array(\ array(\ array(\ array(\ array(\ array(\ array(\ array(\
$tpl->assign(\ $tpl->display('test4.htm'); ?>
模版的写法如下:
templates/test4.htm:
<{section name=sec1 loop=$my_array}> <{$my_array[sec1].value}>
<{if $smarty.section.sec1.rownum is div by 2}> <{/if}> <{/section}>
重点在于 $smarty.section.sec1.rownum 这个 Smarty 变量,在 section 循环中这个变量会取得从 1 开始的索引值,所以当 rownum 能被 2 除尽时,就输出 使表格换列 (注意!是 在前面 在后面) 。因此数字 2 就是我们在一列中想要呈现的资料笔数。各位可以由此去变化其它不同的呈现方式。
加载外部内容
我们可以在模版内加载 PHP 程序代码或是另一个子模版,分别是使用 include_php 及
include 这两个 Smarty 模版语法; include_php 笔者较少用,使用方式可以查询官方手册,这里不再叙述。
在使用 include 时,我们可以预先加载子模版,或是动态加载子模版。预先加载通常使用在有共同的文件标头及版权宣告;而动态加载则可以用在统一的框架页,而进一步达到如 Winamp 般可换 Skin 。当然这两种我们也可以混用,视状况而定。
我们来看看下面这个例子:
test5.php:
require \
$tpl->assign(\测试\
$tpl->assign(\这是模版 2 中的变量\ $tpl->assign(\ $tpl->display('test5_1.htm'); ?>
模版 1 的写法如下:
templates/test5_1.htm:
<{$title}>
<{include file=\ <{include file=$dyn_page}>
<{include file=\自订变量的内容\
模版 2 的写法如下:
templates/test5_2.htm:
<{$content}>
模版 3 的写法如下:
templates/test5_3.htm:
这是模版 3 的内容 模版 4 的写法如下:
templates/test5_4.htm:
<{$custom_var}> 这里注意几个重点:1. 模版的位置都是以先前定义的 template_dir 为基准;2. 所有 include 进来的子模版中,其变量也会被解译。;3. include 中可以用「变量名称=变量内容」来指定引含进来的模版中所包含的变量,如同上面模版 4 的做法。