smart模板页面中写php代码,Smarty模板语法详解

本文实例讲述了Smarty模板语法。分享给大家供大家参考,具体如下:

所有模版标签用分隔符包围,默认为“{”和“}”。

模板注释

模板注释被星号包围,两边星号被定界符“{ }”包围,如 { smarty * }

smarty注释不会在模板文件的最后输出中出现,这与不同(译注:html注释在页面源码中可见,而smarty注释则不能)。

如下简单代码片{smarty}在源码中不可见,而源码可见。

smarty

{*smarty*}

smarty

变量初步

模板变量用美元符号开始,可以包含数字、字母和下划线,这php很像。(注意:配置文件变量是一个不用美元符号开始,可以包含数字、字母和下划线,这php很像。(注意:配置文件变量是一个不用美元符号,而是用#号包围着变量(#hashmarks#),或者是一个$smarty.config形式的变量。)

这里config不做说明,下面是变量示例:

{$a+$b} //最简单的变量处理方法

{$a={$b}+1} //标签嵌套标签

{$array[$a]} //变量做数组索引

{$assign var=fun value=$a+$b} //变量赋值

{$fun="{a}"} //引号套用标签

{$assign var=fun value=[1,2,3]}

{$assign var=fun value=[1,2,[3,4]]}

{$assign var=fun value=[1=>'one',2=>'tow']} //数组定义

{$fun=stlen($a)}

{fun=function($a,$b)} //用作函数参数

{$array.a=1}

{$array.a.b.c($array[a][b][c])=1} //数组索引赋值

{$object->method1($x)->method2($y)} //对象链

双引号中插入变量

1、Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线和中括号[]。

2、对于句号,数组和对象引用等的符号此变量必须用两个反引号`。

3、Smarty3增加了双引号对Smarty标签的支持。在需要包含调节器变量、插件、php函数返回值的情形中非常实用。

{function var="test $foo test"} // 识别 $foo

{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)

{func var="test `$foo.bar` test"} // 识别 $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"} //标签识别

函数

每一个smarty标签输出一个变量或者调用某种函数。在定界符内函数(一般定界符‘{}'包住)和其属性(同样在定界符内)将被处理和输出。例如: {function(函数名) attr1(变量名)=”val”(变量值) attr2=”val”}.

{config_load file="colors.conf"}

{include file="header.tpl"}

{if $highlight_name}

Welcome, {$name}!

{else}

Welcome, {$name}!

{/if}

{include file="footer.tpl"}

1、在模板里无论是内置函数还是自定义函数都有相同的语法。

2、内置函数将在smarty内部工作,例如{if}、{section}和{strip},不能修改他们。

3、自定义函数通过插件机制起作用,它们是附加函数。只要你喜欢,可以随意修改,你也可以自行添加。例如{html_options}和{html_select_date}。

属性

大多数函数都带有自己的属性以便于明确说明或者修改他们的行为,smarty函数的属性很像HTML中的属性。静态数值不需要加引号,但是字符串建议使用引号。可以使用普通smarty变量,也可以使用带调节器的变量作为属性值,它们也不用加引号。你甚至可以使用php函数返回值和复杂表达式作为属性值。

Math

数学运算可以直接作用到变量值。

{$foo+1}

{$foo*$bar}

{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}

{assign var="foo" value="`$foo+$bar`"}

忽略smarty语法

忽略Smarty对某些语句段的解析很有必要。一种典型的情况是嵌入到模板中的javascript或Css代码。原因在于这些语言使用与Smarty默认定界符‘{'和‘}'一样的符号。

方法:一个避免出现这种情况的好习惯是把你的javascript/css代码分离出来保存成一个独立文件,再用html方法链接到模版中。这样做也有利于浏览器缓存脚本。如果你想把Smarty变量、方法嵌入到javascript/css,请看下面的运用。

在Smarty模版,如果‘{'和‘}'大括号里包含有空格那么整个{}内容会被忽略,你可以设置Smarty类变量$auto_literal=false来取消这种规则。

// the following braces are ignored by Smarty 以下大括号的内容会被Smarty忽略

// since they are surrounded by whitespace 因为它们里面有空格

function foobar {

alert('foobar!');

}

// this one will need literal escapement 下面的内容会保持原义输出

{literal}

function bazzy {alert('foobar!');}

{/literal}

{literal}…{/literal}块被用来忽略模版语法的解析,你也可以用{idelim},{rdelim}标签或{smarty.Idelim}、{smarty.Idelim}、{smarty.rdelim}变量来忽略个别大括号(译注:后面两种方法主要用来在模版中输出左右大括号)。

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值