Smarty的标签都是使用定界符括起来。 默认定界符是{ 和 }, 但定界符可以被改变。
注释: {* 这是一个注释 *}
变量:
模板变量以美元符号$开头,由字母、数组和下划线组成,和
PHP variable
相似。 变量可以引用数字索引或非数字索引的数组,对象的属性和方法等。不过,配置变量是例外。从 配置文件 获取的变量,可以通过 井号引用起来访问如 #hash_marks# , 或者通过Smarty变量 $smarty.config 来访问。 后者在使用其他属性或者是访问别的变量值时比较有用,如$smarty.config.$foo。
<pre name="code" class="php">{$Name} {$product.part_no} <b>{$product.description}</b> {$Contacts[row].Phone} <body bgcolor="{#bgcolor#}">
从PHP赋值的变量
以美元符号 (
$
) 开头。
<?php $smarty = new Smarty(); $smarty->assign('firstname', 'Doug'); $smarty->assign('lastname', 'Evans'); $smarty->assign('meetingPlace', 'New York'); $smarty->display('index.tpl'); ?>
Hello {$firstname} {$lastname}, glad to see you can make it. <br /> {* this will not work as $variables are case sensitive *} This weeks meeting is in {$meetingplace}. {* this will work *} This weeks meeting is in {$meetingPlace}.
Hello Doug Evans, glad to see you can make it. <br /> This weeks meeting is in . This weeks meeting is in New York.
数组赋值,
可以通过点号“.”来使用赋值的数组变量。
<?php $smarty->assign('Contacts', array('fax' => '555-222-9876', 'email' => 'zaphod@slartibartfast.example.com', 'phone' => array('home' => '555-444-3333', 'cell' => '555-111-1234') ) ); $smarty->display('index.tpl'); ?>
{$Contacts.fax}<br /> {$Contacts.email}<br /> {* you can print arrays of arrays as well *} {$Contacts.phone.home}<br /> {$Contacts.phone.cell}<br />
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />
数组下标,
你可以通过下标来使用数组,和PHP语法一样。
<?php $smarty->assign('Contacts', array( '555-222-9876', 'zaphod@slartibartfast.example.com', array('555-444-3333', '555-111-1234') )); $smarty->display('index.tpl'); ?>
{$Contacts[0]}<br /> {$Contacts[1]}<br /> {* you can print arrays of arrays as well *} {$Contacts[2][0]}<br /> {$Contacts[2][1]}<br />
555-222-9876<br /> zaphod@slartibartfast.example.com<br /> 555-444-3333<br /> 555-111-1234<br />
name: {$person->name}<br /> email: {$person->email}<br />
name: Zaphod Beeblebrox<br /> email: zaphod@slartibartfast.example.com<br />
双引号中嵌入变量:
1、Smarty可以识别出在双引号中嵌套的 变量值,这些变量名称必须只包括 字母、数字和下划线。 参见命名规则。
2、另外,带有其他字符的,如点号(.)或者 $object->reference形式的变量, 必须用`单引号`括起来。
3、Smarty3中允许在双引号中嵌入Smarty的标签并运行。 如果你需要在双引号的变量上使用修饰器、插件或者PHP函数等,这是非常有用的。
避免Smarty解析
有时候部分模板中的代码是不需要或者不希望被Smarty解析的, 比较典型的例子是嵌入在页面HTML中的Javascript或CSS代码。 问题通常发生在这些语言会经常使用{ 和 },但{ 和 }也恰好是Smarty的 定界符。
避免被解析的一个良好方式,是分离你的Javascript/CSS代码到单独的文件中, 然后在HTML中引入它们。而且这样也有利于浏览器进行缓存。 当你需要嵌入Smarty的变量或者函数到Javascript/CSS中,请参考下面的方式:{literal}..{/literal}可以让块中间的内容忽略Smarty的解析。 在需要使用定界符的时候,可以通过 {ldelim},{rdelim}标签,或者 {$smarty.ldelim},{$smarty.rdelim}的变量来使用。
Smarty的默认定界符{ 和 }可以整齐地界定一般内容的显示。 然而你可以通过修改Smarty的$left_delimiter 和 $right_delimiter 的变量值,设置更适合的定界符。
Note:
修改定界符会影响到全部模板代码和解析,请确保在修改前已清除了全部的缓存和编译文件。