4.1 变量
模板中的变量主要来源有三种。
4.1.1、是由原php文件中分配过来的。
$smarty->assign(‘name’,’韩灵稚’); #在源php文件中分配
<span>你好, {$name}</span> #在模板文件中使用
4.1.2、是由配置文件中分配过来的。
$smarty->configLoad(“configs/my.conf”) #在源php文件中载入配置文件,也可以在模板中载入
<span style=”color:{#fontcolor#}; font-size:{#fontsize#};”>这是{#gv#}</span><br /> #在模板文件中使用
4.1.3、是在模板文件中创建的。
{assign var=”name” value=”韩灵稚” nocache=”false”scope=”global”}
#在模板中定义的变量,如果之前定义了相同的变量,则以最后一次定义为准。
{$name=”韩灵稚”} #给变量直接赋值,如果该变量原来不存在,自动创建,3.0新特性。
{assign var=foo value=[1,2,3]} #定义普通数组变量
{assign var=foo value=['y'=>'yellow','b'=>'blue']} #定义关联数组
{assign var=foo value=[1,[9,8],3]} #定义数组中的数组
{$foo[]=1} #增加变量数组$foo的一个元素
<span>你好, {$name}</span> #在模板文件中使用
【相关函数】
$smarty->getVariable($variable, $_ptr = null, $search_parents = true,
$error_enable = true) #获得变量,仅限于获得第一种方式的变量
$smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
#获得变量,可以获得第一种和第三种方式的变量(第三种方式变量scope必须为global或者parent),
如果想获得配置变量参看3.4
4.2 Smarty保留变量
Smarty系统中保留了一些内置变量,可以快速访问相应的变量。但是不能再源php中获得这些变量。
4.2.1、请求访问变量(Request variables)
$smarty.get.变量 #显示通过get方式传过来的指定变量的值。
$smarty.post.变量 #显示通过post方式传过来的指定变量的值。
$smarty.cookies.变量 #显示通过cookie中指定变量的值。
$smarty.server.SERVER_NAME #显示server变量值,phpinfo()中$_SERVER系列变量
$smarty.env.PATH #显示系统环境变量值,phpinfo()中$_ENV系列变量
$smarty.session.变量 #显示session中指定变量的值
$smarty.request.变量 #显示通过post、get、cookie中指定变量的值。
4.2.2、时间访问变量
{$smarty.now} #显示unix系统时间戳,需要变量调节器格式化,参看4.2.4,也可以使使用{time()}
4.2.3、常量访问变量
{$smarty.const._MY_CONST_VAL} #访问php中的常量包括自定义常量和系统常量
4.2.4、{$smarty.capture}
4.2.5、配置访问变量
{$smarty.config.配置变量} #访问配置变量,等同于 #配置变量# 方式
4.2.6、{$smarty.section}, {$smarty.foreach}
参看4.4.3和4.4.4
4.2.7、{$smarty.template} #显示模板路径和名称
4.3 变量操作
4.3.1赋值
{$name = 新值} 比如,{$name=”我的名字叫韩灵稚”} #新值将替代原值,如果原来无该变量,
则创建变量并赋值。配置变量无法重新赋值。
{$name = 表达式} 比如,{$name = 1+2+$foo['bar']} #$foo['bar']的值为1, 变量值为4
{$foo['bar']=1} #给数组的一个元素赋值
{$foo['bar']['blar']=1} #给多维数组的一个元素赋值
{$foo = array(1,2,3,4,5)} #利用php函数创建变量$foo,并赋值。
4.3.2访问
最简单的访问方法是 {$var},配置变量访问是{#configvar#}
数组变量的访问可以是{$array[1][1]},也可以支持{$array.1.1}
对象的访问{$object->method1($x)},也支持对象链,{$object->method1($x)->method2($y)}
字符串与变量的混合输出
{“大家好,我是$name<br />”} #Smarty可以识别嵌入在双引号中的变量,
只要此变量只包含数字、字母、下划线。
{“大家好,我是`$name[$obj->a]`<br />”} #中括号[]、句号. 对象相关 -> ,必须将变量用两个`符号括起。
4.3.3变量名变量
与php相同,都支持在变量名称中使用变量,smarty还支持使用表达式。
$foo #一个普通的变量
$foo_{$bar} #变量名中包含变量
$foo_{$x+$y} #变量名中可以支持表达式
$foo_{$bar}_buh_{$blar} #变量名包含多个变量
4.3.4变量调节器
变量调节器主要是对变量进行格式化。
{$var|capitalize} #将变量首字大写
{$var|count_characters:false} #计算变量里的字符数,false为不计算空格。
若变量为数值则为数字和小数点等其他运算符的总和
{$var| cat:var2} #将var2连接到var,若为数值以字符串处理。
{$var| count_paragraphs} #计算变量里的段落数量,已“\n“区分
{$var| count_sentences} #计算变量中句子的数量,不好使
{$var| count_words} #计算变量中单词的数量 已非字母和数字的字符分割统计
{$var| date_format :”%H:%M:%S” } #格式化变量日起,具体参数看chm文档
{$var| default:”no title” } #当变量为空时,为变量提供一个默认值
{$var| escape:url} #对变量值进行转码,具体参数看chm文档
{$var| indent:10:”*”} #对变量指定具体字符进行缩进,若为空格在html中不会显示出来,具体参数看chm文档
{$var| lower} #将变量小写
{$var| nl2br } #将变量中的“\n“转换成”<br />“
{$var| regex_replace:”/[\r\t\n]/”:” “} #将变量中的符合正则的内容替换成指定内容
{$var| replace:”Garden”:”Vineyard”} #将变量中要求的内容替换成指定内容
{$var| spacify:”^^”} #将变量字符与字符之间插入指定内容,包括空格
{$var|string_format:”%d”} #将变量中的内容格式化,格式化参数同printf
{$var| strip: “*”} #用一个空格或一个给定字符替换所有重复空格,换行和制表符
{$var| strip_tags} #删除变量中的html标记, 去除<和>标签,包括在<和>之间的任何内容
{$var| truncate:30:”…”:true} #截取变量的到规定的长度,具体参数看chm文档
{$var| upper} #将变量大写
{$var| wordwrap:30:”\n”:true} #规定指定的长度强制换行,具体参数看chm文档
修改器可以复合组合。
{$articleTitle|lower|spacify|truncate:30:”. . .”}
设置默认变量调节器
$smarty->getDefault_modifiers() #默认为空数组
$smarty->setDefault_modifiers(array(‘spacify:”^^”’,’capitalize’) #设置变量的默认调节器,必须用array
{name} #模板变量name自动加入上面两个调节器
同时也可以定义自己的调节器,详情请参考6.7.4和6.8.4
4.2.5变量作用域(未写)