Smarty模板的常用语法主要包含以下几部分:

n 基本语法

u Smarty模板中的注释方式:

模板注释被*号包围,例如 {* this is a comment *}
smarty注释不会在模板文件的最后输出中出现.它只是模板内在的注释. 

u 模板中的数学运算:

例如:{$foo+1},{$foo*$bar}

u 双引号里值的嵌入:

Smarty可以识别嵌入在双引号中的变量,此变量必须用两个`符号包住。(此符号和~在同一个键上,一般在ESC键下面一个键上)。

例如:

{config_load file="`$smarty.const.VIEWPATH`/website.conf"}

在内建函数中会讲到config_load函数的用法。

 

n 模板文件调用从PHP中assign的变量

u 如果assign的是关联数组:

模板中采用{ $arr.title }的形式调用。

u 如果assign的是索引数组:

模板中采用{ $arr.0 }或者{ $arr[0] }两种形式都可以调用。

u 如果assign的是对象:

模板中采用{ $person->name }的形式调用属性,采用{ $person->say() }的形式调用方法。

 

n 模板文件调用从配置文件读取的变量

模板中使用配置文件中的变量,需要通过用两个"#"或者是smarty的保留变量 $smarty.config来调用。额外注意的是:#号和变量名之间不能有空格。

一般网站可以将页面字符集,页面关键词描述,网站名称等定义到配置文件中。然后在模板文件中直接调用。当然首先还是要通过config_load来引入配置文件。

例如以下代码:

{config_load file="`$smarty.const.VIEWPATH`/website.conf"}

<meta http-equiv="Content-Type" content="text/html; charset={#charset#}" />

<meta name="description" content="{#keywords#}" />

<meta name="keywords" content="{#keywords#}" />

<title>{#webname#}</title>

 

n $smarty保留变量

u 页面请求变量:就是get,post,server,session等变量

例如:通过{ $smarty.session.username }在模板中输出储存在session中的值。{ $smarty.get.name }或{ $smarty.post.name }可以在模板中输出上一个页面通过表单或地址栏的传值。

u 使用{ $smarty.const }在模板中输出在PHP页面中定义的常量:

例如:{ $smarty.const.VIEWPATH }

u 使用{ $smarty.now }在模板中获取到当前时间戳:

u 使用{ $smarty.config }获取当前页面载入的配置文件中定义的变量:

当然配置文件的变量也可以使用{ #变量名# }的形式来获取。再次提醒:#号和变量名之间不能有空格。

 

n 模板中常用变量调节器

u default

为空变量设置一个默认值。
当变量为空或者未分配的时候,将由给定的默认值替代输出。

例如:

{$articleTitle|default:"no title"}

{$myTitle|default:"no title"}

这样就省去使用if else判断了。

u truncate

从字符串开始处截取某长度的字符,默认是80个。
你也可以指定第二个参数作为追加在截取字符串后面的文本字串。该追加字串被计算在截取长度中。
默认情况下,smarty会截取到一个词的末尾。
如果你想要精确的截取多少个字符,把第三个参数改为"true"

注意:对于中文来说,截取字符串长度会涉及到字符集问题。

示例代码如下:

{$articleTitle|truncate}

{$articleTitle|truncate:30}

{$articleTitle|truncate:30:""}

{$articleTitle|truncate:30:"---"}

{$articleTitle|truncate:30:"":true}

{$articleTitle|truncate:30:"...":true}

 

u count_characters

计算变量里的字符数

例如:

{$articleTitle| count_characters}

注意:对于中文来说,会涉及到字符集问题。

u strip_tags

去除Html标签。可以去除<>标签,包括在<>之间的任何内容

例如:{$articleTitle|strip_tags}

u date_format

格式化从函数strftime()获得的时间和日期。

示例代码如下:

{$smarty.now|date_format}

{$smarty.now|date_format:"%A, %B %e, %Y"}

{$smarty.now|date_format:"%H:%M:%S"}

{$yesterday|date_format}

{$yesterday|date_format:"%A, %B %e, %Y"}

{$yesterday|date_format:"%H:%M:%S"}

 

u cat

连接字符串

cat里的值连接到给定的变量后面

例如:{$articleTitle|cat:" ……"}

 

n 模板中常用内建函数

u include

include标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中是可用的。 必须指定 file 属性,该属性指明模板资源的位置。

u literal

literal标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息。 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本或者css样式。 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示。

u foreach

foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比 section 简单许多,缺点是只能处理简单数组。

{foreach} 必须和 {/foreach} 成对使用,且必须指定 from 和 item 属性。

name 属性可以任意指定(字母、数字和下划线的组合)。

foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一。

from 属性(通常是数组)决定循环的次数。

 

示例代码如下:

{foreach name=outer item=contact from=$contacts}

{foreach key=key item=item from=$contact}

{$key}: {$item}<br>

{/foreach}

{/foreach}

 

u if,elseif,else

Smarty 中的 if 语句和 PHP 中的 if 语句一样灵活易用,并增加了几个特性以适宜模板引擎。{if} 必须于 {/if} 成对出现. 可以使用 else 和 elseif 子句。

可以使用以下条件修饰词:eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by、==、!=、>、<、<=、>=。

使用这些修饰词时必须和变量或常量用空格格开。

 

示例代码如下:

{if $name == "Fred" || $name == "Wilma"}

...

{/if}

{if $var is even}

...

{/if}

{if $var is not odd}

...

{/if}

{if $var is div by 2}

...

{/if}

 

u config_load

加载模板的配置文件,例如:

{config_load file="`$smarty.const.VIEWPATH`/website.conf"}

u insert

insert 函数类似于 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数。

使用insert,必须定义name属性,而name属性的值是一个插件文件的文件名的一部分。

 

n 配置文件

配置文件有利于设计者管理文件中的模板全局变量。最简单的例子就是模板色彩变量。

一般情况下你如果想改变一个程序的外观色彩,你就必须通过去更改每一个文件的颜色变量。如果有这个配置文件的话,色彩变量就可以保存在一个地方,只要改变这个配置文件就可以实现你色彩的更新。在需要的模板页通过config_load来载入配置文件。一般配置文件都习惯保存成conf后缀。如:website.conf

 

示例代码如下:

 

1) 知识点4Smarty在PHP文件中的语法

Smarty在PHP文件中的语法主要包含以下几部分:

n assign方法:

void assign (string varname, mixed var)。用来赋值到模板中。可以指定一对 名称/数值。

n display方法:

void display (string template [, string cache_id])。第二个参数为可选。显示模板,需要指定一个合法的模板资源的类型和路径。还可以通过第二个可选参数指定一个缓存号。

n fetch方法:

string fetch (string template [, string cache_id]) 。取得输出的内容。返回一个模板输出的内容(HTML代码),而不是直接显示出来,需要指定一个合法的模板资源的类型和路径。你还可以通过第二个可选参数指定一个缓存号。

n template_exists 方法:

bool template_exists (string template) 。检查制定的模板是否存在,参数template既可以是模板的文件路径,也可以是指定的资源字符串。

n is_cached 方法:

void is_cached (string template, [string cache_id]) 。在指定模板的缓存存在时返回真。只有在缓存设置为真时才可用。