1、模板中的注释
每一个Smarty模板文件,都是通过Web前台语言(XHTML、CSS和JavaScript等)结合Smarty引擎的语法共同开发的。除了在模板中多加了一些Smarty语法用来处理程序逻辑以外,用到的其他Web前台开发语言和原来完成一样,注释也没有变化。如果在模板文件中使用HTML或是JavaScript等前台语言的注释,用户可以通过浏览网页源代码的方式查看到这些注释内容。Smarty也在模板中给我们提供了一种注释的语法,包围在定界标记”{*”和”*}”之间的都是注释内容,可以包括一行或多行,并且不会在用户浏览页面源代码时查看到,它只是模板内在的注释。以下是一个合法的Smarty注释:
{* this is a comment *} //模板注释被*号包围,它不会在模板文件的最后输出中出现
2、模版中的变量应用
对于PHP程序员来说,只要是将数据分配到模板中使用,而不用管数据是什么类型的,统统使用Smarty对象的assign()方法完成。虽然在模版中使用各种类型变量的语法和PHP相似,而对于不太熟悉PHP语法的美工来说,设计模版时设计各种类型数据的处理还是比较复杂的。需要注意的是,在Smarty模板中变量预设是全域的。也就是说你只要分配一次就可以了,如果分配两次以上,变量内容会以最后分配的为主。就算我们在主模板中加载了外部的子模板,子模板中同样的变量一样也会被替代,这样我们就不用针对子模板再做一次解析的动作。
在模板中使用一些复杂变量
模板变量用美元符号$开始,可以包含数字、字母和下画线,这与PHP变量很像。你可以引用数组的数字或非数字索引,当然也可以引用对象属性和方法。
在模板中访问关联数组有两种格式,既可以使用PHP原生语法风格引用索引数组,又可以通过句号“.”后接数组键值的方式引用从PHP分配的关联数组变量。访问关联数组变量如下所示:
代码如下 | 复制代码 |
//Smarty "dot" 语法 {$Contacts.fax} {$Contacts.email} {$Contacts.phone.home} {$contacts.phone[0]} //PHP式语法 {$Contacts[fax]} {$Contacts['email']} {$contacts['phone']['home']} {$contacts['phone'][0]} |
通常,在模板中通过遍历输出数组中的每个元素,可以通过Smarty中提供的foreach或section语句完成,而本节主要介绍在模板中单独输出数组的某个元素。在模板中使用PHP分配的对象变量,可以通过’->’符号后接指定属性名或方法的方式访问PHP分配的成员,和在PHP中访问对象的成员方式完全一致。另外,在Smarty 3中也实现了对象的方法链(对象的连贯操作)。
代码如下 | 复制代码 |
{$person->name} {$person->say()} |
Smarty 3中引入的对象链操作方式:
代码如下 | 复制代码 |
{$object->method1($x)->method2($y)} |
在模板中应用表达式
Smarty3在几乎所有地方都支持表达式,如果安全策略允许,表达式甚至可以包含PHP函数,对象的方法及属性,简单应用如下所示:
代码如下 | 复制代码 |
{$x+$y} {$foo = strlen($bar)} {assign var = foo value = $x+$y} {$foo[$x+3]} |
双引号里嵌入变量
在Smarty模板中可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下画线或中括号[]。对于其他的符号(句号、对象相关的等)此变量必须用两个反引号“’”(此符号和“~”在同一个键上)包住。使用的示例如下所示:
{func var=”test ‘$foo.bar’ test”} //嵌入对象中的成员时将变量使用反引号包住
模式中的可变变量
在Smarty3中又引入了PHP可变变量的机制,即模板变量名本身可以是一个表达式。可变变量的使用如下所示:
代码如下 | 复制代码 |
$foo_{$bar} $foo_{$x+$y} |
3、模板中的函数应用
在模板设计中,使用Smarty的语法总结后只有两种:一种是变量,另一种就是函数。在Smarty3中提供了可以直接在模板中调用PHP的系统函数和自定义函数的功能,但美工又能了解多少个PHP函数呢?虽然在模板中直接调用函数的方式和在PHP调用的形式完全一样,但并不推荐这么使用。
如果直接使用模板变量符号引用PHP函数,该函数应有返回值。这种方式如果是由程序员去开发模版时使用还比较合适,但如果让美工去调用PHP函数,最好还是按Smarty2中延续过来的方式,先将函数注册成为Smarty的插件,使PHP的函数成为Smarty标签的形式,这样美工就可以按HTML标签的语法格式去调用PHP的函数了,这对不太了解PHP语法的美工来说还是非常有必要的。
在Smarty中常用的函数类型有三种:函数、块函数、变量修改器。这里先来了解一下Smarty的两种类型函数。
函数
Smarty函数的使用方法和HTML独立元素标签非常相似,Smarty函数名相当于HTML标签名称,调用Smarty函数传递的参数相当于HTML标签的属性,这是专门给熟悉HTML的美工提供的一种Smarty函数调用方法。如下所示:
代码如下 | 复制代码 |
//在模板中使用HTML标签的格式 //在模板中使用Smarty函数的格式 {funcname attr1="vall" attr2="val2" attr3="val3"} |
在定界符“{}”内的函数funcname和其属性将被处理和输出,上例中调用函数funcname可以是Smarty内置函数,也可以是自定义的PHP函数(插件),为函数传递的参数格式和HTML标签的属性用法完全一致。使用示例如下所示:
代码如下 | 复制代码 |
{config_load file="colors.conf"} //调用Smarty内置config_load函数加载配置文件colors.conf {include file="header.tpl"} //调用Smarty内置include函数包含头部模板文件header.tpl |
块函数
Smarty中的块函数也是函数的一种形式,只不过Smarty的函数相当于HTML独立标签,而Smarty的块函数则相当于HTML的闭合标签元素。和HTML对比介绍如下所示:
代码如下 | 复制代码 |
//在模板中使用Smarty块函数的格式 {blockname attr1="vall" attr2="val2"} 内容 {/blockname} |
Smarty的块函数需要结束标签来关闭“{blockname}…{/blockname}”,在执行时会将块中的内容回传到函数blockname中,并结合属性的行为去处理和输出。Smarty块函数在模板中的使用示例如下所示:
代码如下 | 复制代码 |
{nocache} {$smarty.now|date_format} {/nocache} {if $highlight_name} Welcome,{$name}! {else} Welcome,{$name}! {/if} |