smarty基本语法:
1.注释:<{* this is a comment *}>,注意左右分隔符的写法,要和自己定义的一致。
<{* I am a Smarty comment, I don't exist in the compiled output *}>
2.变量:模板变量用美元符号$开始,可以包含数字、字母和下划线,这与php变量很像。可以引用数组的数字或非数字索引,当然也可以引用对象属性和方法。
<{* 每一个smarty标签输出一个变量或者调用某种函数。在定界符内函数(一般定界符‘{}’包住)和其属性(同样在定界符内)将被处理和输出。例如: {funcname attr1="val" attr2="val"} *}>第一个参数是函数名,第二个参数是参数名,第三个参数是参数值。
{config_load file="colors.conf"}//参数名为config_load,参数名为file,参数值为colors.conf。{include file="header.tpl"}{if $highlight_name} Welcome, {$name}! {else} Welcome, {$name}!{/if}{include file="footer.tpl"}
3.函数
<{* 每一个smarty标签输出一个变量或者调用某种函数。在定界符内函数(一般定界符‘{}’包住)和其属性(同样在定界符内)将被处理和输出。例如: {funcname attr1="val" attr2="val"} *}>第一个参数是函数名,第二个参数是参数名,第三个参数是参数值。
{config_load file="colors.conf"}//参数名为config_load,参数名为file,参数值为colors.conf。{include file="header.tpl"}{if $highlight_name} Welcome, {$name}! {else} Welcome, {$name}!{/if}{include file="footer.tpl"}
4.属性:smarty函数的属性很像HTML中的属性。静态数值不需要加引号,但是字符串建议使用引号。可以使用普通smarty变量,也可以使用带调节器的变量作为属性值,它们也不用加引号。甚至可以使用php函数返回值和复杂表达式作为属性值。一些属性用到了布尔值(true或false),它们表明为真或为假。如果没有为这些属性赋布尔值,那么默认使用true为其值。
{ include file="header.tpl"}{ include file="header.tpl" nocache} // 等于nocache=true{ include file="header.tpl" attrib_name="attrib value"}//这些都是属性,=前面是属性名,后面是属性值。{ include file=$includeFile}{ include file=#includeFile# title="My Title"}{assign var=foo value={counter}} // plugin result{assign var=foo value=substr($bar,2,5)} // PHP function result{assign var=foo value=$bar|strlen} // 使用调节器{assign var=foo value=$buh+$bar|strlen} // 更复杂的表达式{html_select_date display_days=true}{mailto address="smarty@example.com"}
5.双引号里面嵌入变量
Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线和中括号[],对于其他的符号(句号、对象引用等等)此变量必须用两个反引号`(此符号和~'在同一个键上,一般在ESC键下面)包住。
Smarty3增加了双引号对Smarty标签的支持。在需要包含调节器变量、插件、php函数返回值的情形中非常实用。
{func var="test $foo test"} // 显示 $foo,解析2个test之间的内容。{func var="test $foo_bar test"} // 显示 $foo_bar,可以解析出_。{func var="test `$foo[0]` test"} // 显示 $foo[0],支持''和[]的解析。{func var="test `$foo[bar]` test"} // 显示 $foo[bar],支持''和[]的解析。{func var="test $foo.bar test"} // 显示 $foo (而不是$foo.bar) Smarty只识别变量$foo,其它按原文输出{func var="test `$foo.bar` test"} // 显示 $foo.bar 加了反引号,Smarty能识别变量$foo.bar{func var="test `$foo.bar` test"|escape} // 调节器在引号外{func var="test { $foo|escape} test"} // 调节器在引号内{func var="test {time()} test"} // PHP 函数结果{func var="test {counter} test" //插件结果{func var="variable foo is {if !$foo}not {/if} defined"} // Smarty 块功能
6.数学运算:数学运算可以直接作用到变量值。
{ $foo+1}//直接相加{ $foo*$bar}//直接相乘{ $foo->bar-$bar[1]*$baz->foo->bar()-3*7}//取类里面的元素相乘
7.忽略smarty解析:有时,忽略Smarty对某些语句段的解析很有必要。一种典型的情况是嵌入到模板中的javascript或Css代码。原因在于这些语言使用与Smarty默认定界符‘{’和‘}’一样的符号。
{literal}//literal是smarty模板的标记,规定里面的内容不解析。function bazzy {alert('foobar!');}//不需要解析的内容{/literal}//结束标签
smarty变量
1.从php分配的变量
Smarty有几种不同类型的变量,变量的类型取决于它的前缀符号是什么(或者被什么符号包围)。
Smarty的变量可以直接被输出或者作为函数属性和调节器(modifiers)的参数,或者用于内部的条件表达式等等。如果要输出一个变量,只要用定界符将它括起来就可以。
例如:下面就是讲变量$a注册到smarty里面,名字变成了ceshi。支持普通变量,索引数组、关联数组、对象等。
"111","two"=>"222");class Ren{ public name="张三";}$r = new Ren();$smarty->assign("ceshi",$a);//注入变量$smarty->assign("shuzu",$attr);$smarty->("guanlian",$attr1);$smarty->("duixiang",$r);$smarty->display("test.html");//调用模板文件来显示?>
html页面解析方法
无标题文档 <{$ceshi}> <{$shuzu[0]}> <{$guanlian.two}> <{$duixiang->name}>
2.(1)简单的配置文件
从配置文件读取的变量
加载配置文件后,配置文件中的变量需要用两个井号"#"包围或者是smarty的保留变量$smarty.config.来调用(下节将讲到),第二种语法在变量作为属性值嵌入至引号的时候非常有用,详细可参考双引号里值的嵌入。
示例:取配置文件configs里面的文件test.conf,里面的文件如下图所示。
下面是取配置文件里面的内容的代码
无标题文档 <{config_load file='test.conf'}>
显示结果为
这说明可以用这种方法取出配置文件里面的属性,可以直接修改配置文件里面的内容来修改属性值。
(2)复杂的配置文件
在配置文件里面,如果文字的是在##里面,说明之间的是注释,是读取不出来的。
如果出现[],代表把配置文件分了很多块,从[]开始到下一个[]之间的内容就是一个块。下面是读取块的内容:
配置文件里面的内容:里面有2个块。
读取的代码:
无标题文档 <{config_load file='test.conf' section='two'}>
3.{$smarty}保留变量
(1)Request variables页面请求变量
请求变量诸如$_GET, $_POST,$_COOKIE, $_SERVER, $_ENV and $_SESSION 这些都是可以直接拿来用的。下面是输出变量的方法。
<{$smarty.get.page}> <{$smarty.post.page}><{$smarty.cookies.username}><{$smarty.server.SERVER_NAME}><{$smarty.env.PATH}><{$smarty.session.id}><{$smarty.request.username}>
(2){$smarty.now}
<{$smarty.now}>
(3){$smarty.const}代表的是常量
现在test.php页面定义一个常量
define("AA","hello");//define代表的是常量
读取常量:
<{$smarty.const.AA}>
输出结果为hello。
(4){$smarty.capture}
可以通过{$smarty.capture}变量捕获内置的{capture}...{/capture}模版输出。
(5){$smarty.config}
{$smarty.config}可以取得配置变量。
<{$smarty.config.color}>
(6){$smarty.section}
{$smarty.section}用来指向{section}循环的属性,里面包含一些有用的值。
(7){$smarty.template}
返回经过处理的当前模板名(不包括目录)。
(8){$smarty.current_dir}返回经过处理的当前模板目录名。
(9){$smarty.version}
返回经过编译的Smarty模板版本号。
4.变量调节器
变量调节器作用于变量、自定义函数或字符串。变量调节器的用法是:‘|’符号右接调节器名称。变量调节器可接收附加参数影响其行为。参数位于调节器右边,并用‘:’符号分开。
(1)capitalize
将变量里的所有单词首字大写。它与php的ucwords()函数类似。写法如下:
<{$articleTitle|capitalize}>
(2)cat
将cat里的值后接到给定的变量后面。即连接字符串。写法如下:
<{$articleTitle|cat:"yesterday"}>
(3)count_characters
计算变量里的字符数。写法如下:
<{$articleTitle|count_characters}>
(4)count_sentences
计算变量里句子的数量。写法如下:
<{$articleTitle|count_sentences}>
(5)date_format
本调节器将格式化的日期和时间经php函数strftime()处理。Unix时间戳、mysql时间戳及由年月日组成的字符串格式的日期可以传递到smarty经php函数strtotime()解析。设计者可以使用date_format完全控制日期格式,如果传给date_format的日期为空值,但提供了第二个参数,那么将使用第二参数格式化时间。
<{$smarty.now|date_format:""%Y-%m-%d %H:%M:%S}>
(6)indent
在每行缩进字符串,默认是4个字符。对于第一个可选参数,你可以指定缩进字符数,对于第二个可选参数,你可以指定使用什么字符缩进,例如'\t'作为tab。
(7)replace
一种在变量中进行简单的搜索和替换字符串的处理。等同于php的函数。
(8)strip
用一个空格或一个给定字符替换所有重复空格、换行和制表符。
(9)truncate
从字符串开始处截取某长度的字符,默认是80个,你也可以指定第二个参数作为追加在截取字符串后面的文本串。该追加字串被计算在截取长度中。默认情况下,smarty会截取到一个词的末尾。如果你想要精确的截取多少个字符,把第三个参数改为"true" 。