一、条件判断语句:
基本句式:
{if $name eq "Mary"}
Welcome Mary.
{elseif $name eq "Jack"}
Welcome Jack.
{else}
Welcome everybody.
{/if}
其中eq是条件修饰符,在Smarty中,还有其他条件修饰符:eq(==)、neq(!=)、gt(>)、lt(<)等。
注意:条件修饰符必须用空格与变量和常量分开。
二、循环语句:
1.section:
test.php(省略了$smarty对象的实例化和Smarty文件的引用)
<?php
$arr = array(
array(
"title"=>"第一篇",
"content"=>"内容",
"author"=>"作者"),
array(
"title"=>"第一篇",
"content"=>"内容",
"author"=>"作者")
);
$smarty->assign("arr", $arr);
$smarty->display("test.tpl");
?>
test.tpl(模板文件)
{section name=article loop=$arr}
{$arr["article"].title}
{$arr["article"].content}
{$arr["article"].author}
<br />
{/section}
如果当前没有数据,可以使用
{sectionelse}
section中的属性:
name:(必选) 是section循环的名称只是标示循环唯一的名字没有特别意义,前面没有$符号;
loop: (必选)是在php声明中的变量名称,用来标示是循环哪一个数组(即要循环数组名)需要使用$;
start: (可选)循环执行的初始位置. 如果该值为负数,开始位置从数组的尾部算起. 例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5. 非法值(超过了循环数组的下限)将被自动调整为最接近的合法值.
step: (可选)如其它语言的循环,是一个步长,如果为负数,则倒序循环;
max:(可选)循环的最大下标,如果是1则只循环1次,如果为2则循环2次;
show:(可选)默认为true即显示。如果设置了{sectionelse}。表示如果数组没有内容的时候显示这部分的内容;如果show为false则显示这部分。如果没有设置{sectionelse}则不输出该数组。
2.foreach:(可以使用PHP的语法使用)
test.tpl
{foreach item=$article from=$arr}
{$article.title}
{$article.content}
{$article.author}
<br />
{foreachelse}
当前没有文章
{/foreach}
如果当前没有数据,可以使用{foreachelse}。
也可以像PHP语法一样使用foreach。
test.tpl
{foreach $arr as $article}
{$article.title}
{$article.content}
{$article.author}
<br />
{foreachelse}
当前没有文章
{/foreach}
三、文件引用:
在Smarty语法中,引入函数只有include一个。
属性 | 类型 | 是否必须 | 缺省值 | 描述 |
---|---|---|---|---|
file | string | Yes | n/a | 待包含的模板文件名 |
assign | string | No | n/a | 该属性指定一个变量保存待包含模板的输出 |
[var ...] | [var type] | No | n/a | 传递给待包含模板的本地参数,只在待包含模板中有效 |
Include 标签用于在当前模板中包含其它模板.。当前模板中的变量在被包含的模板中可用.。必须指定 file 属性,该属性指明模板资源的位置。如果设置了 assign 属性,该属性对应的变量名用于保存待包含模板的输出,这样待包含模板的输出就不会直接显示了。
可以在属性中传递参数给待包含模板.。传递给待包含模板的参数只在待包含模板中可见。 如果传递的参数在待包含模板中有同名变量,那么该变量被传递的参数替代。
包含 $template_dir 文件夹之外的模板请使用 模板资源 说明的格式。
使用外部模板资源的include函数演示:
{* absolute filepath *}
{include file="/usr/local/include/templates/header.tpl"}
{* absolute filepath (same thing) *}
{include file="file:/usr/local/include/templates/header.tpl"}
{* windows absolute filepath (MUST use "file:" prefix) *}
{include file="file:C:/www/pub/templates/header.tpl"}
{* include from template resource named "db" *}
{include file="db:header.tpl"}