给大家整理的一个完整教程,和今天早晨前端遇到的问题解决办法。有兴趣的大家可以看看
今天早上遇到的一个问题
{{include file='inc/header.tpl' title="test `$s.seofield` test" }}
一个变量加一个常量字符串这么写
Smaty的一些特点:
非常非常的快!
用于php分析器干这个苦差事是有效的
不需要多余的模板语法解析,仅仅是编译一次
仅对修改过的模板文件进行重新编译
可以编辑自定义函数和自定义变量因此这个模板语言完全可以扩展
可以自行设置模板定界符,所以你可以使用{{}},{{{{}}}},<!--{{}}-->,等待
诸如if/elseif/else/endif语句可以被传递到php语法解析器,所以{{if....}}表达式是简单或者是复合的。
如果允许的话section之间可以无限嵌套
内建缓存支持
独立模板文件
可自定义缓存处理函数
插件体系结构
注释
模板注释被*号包围,例如 {{* this is a comment *}}
smarty注释不会在模板文件的最后输出中出现.
它只是模板内在的注释.
函数
每一个smarty标签输出一个变量或者调用某种函数.
在定界符内函数(用'{{'包住)和其属性(用界符包住)将被处理和输出.例如:
{{funcname attr1="val" attr2="val"}}.
{{config_load file="colors.conf"}}
{{include file="footer.tpl"}}
属性
大多数函数都带有自己的属性以便于明确说明或者修改他们的行为.
smarty函数的属性很像HTML中的属性.
静态数值不需要加引号,但是字符串建议使用引号.
如果用变量作属性,它们也不能加引号.
一些属性用到了布尔值(真或假).
它们不需要加引号,可以是true,on,yes或者false,off,no.
{{include file="header.tpl"}}
{{include file=$includeFile}}
{{include file=#includeFile#}}
{{html_select_date display_days=yes}}
<SELECT name=company>
{{html_options values=$vals selected=$selected output=$output}}
</SELECT>
双引号里值的嵌入
Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线和中括号[].对于其他的符
号(句号、对象相关的,等等)此变量必须用两个'`'(此符号和‘ ~ '在同一个键上,一般在ESC键下面一个
键上)包住。
{{func var="test $foo test"}}
{{func var="test $foo_bar test"}}
{{func var="test $foo[bar] test"}}
{{func var="test `$foo.bar` test"}}
数学运算
数学运算可以直接应用到变量
{{$foo+1}}
{{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}}
{{if ($foo+$bar.test%$baz*134232+10+$b+10)}}
{{assign var="foo" value="`$foo+$bar`"}}
变量
Smarty有几种不同类型的变量.
变量的类型取决于它的前缀是什么符号(或者被什么符号包围)
Smarty的变量可以直接被输出或者作为函数属性和修饰符(modifiers)的参数,或者用于内部的条件表达
式等等.
如果要输出一个变量,只要用定界符将它括起来就可以.例如:
{{$Name}}
{{$Contacts[row].Phone}}
<body bgcolor="{{#bgcolor#}}">
从PHP分配的变量
调用从PHP分配的变量需在前加"$"符号.(译注:同php一样)
调用模板内的assign函数分配的变量也是这样.(译注:也是用$加变量名来调用)
$smarty->assign('firstname', 'Doug');
从配置文件读取的变量
配置文件中的变量需要通过用两个"#"或者是smarty的保留变量$smarty.config.来调用
第二种语法在变量作为属性值并被引号括住的时候非常有用.
{{include file="#includefile#"}} 这样#includefile#将被当作字符处理,而不表示配置文件变量,
但可以这样表示 {{include file="`$smarty.config.includefile`"}}不要忘了加``
bgcolor="{{#tableBgColor#}}
{{$smarty}}保留变量
{{$smarty}}保留变量可以被用于访问一些特殊的模板变量.
变量调节器
capitalize
count_characters
cat
count_paragraphs
count_sentences
count_words
date_format
default
escape
indent
lower
nl2br
regex_replace
replace
spacify
string_format
strip
strip_tags
truncate
upper
wordwrap
变量调节器用于变量,自定义函数和字符串。请使用‘|’符号和调节器名称应用调节器。变量调节器由赋予的
参数值决定其行为。参数由‘:’符号分开。
{{$topic|truncate:40:"..."}}
{{"now"|date_format:"%Y/%m/%d"}}
{{mailto|upper address="me@domain.dom"}}
如果你给数组变量应用单值变量的调节,结果是数组的每个值都被调节。如果你只想要调节器用一个值调节整
个数组,你必须在调节器名字前加上@符号。例如: {{$articleTitle|@count}}(这将会在 $articleTitle 数
组里输出元素的数目)
capitalize
将变量里的所有单词首字大写。
{{$articleTitle|capitalize}}
count_characters[字符计数]
计算变量里的字符数,它有多个属性
{{$articleTitle|count_characters}}
{{$articleTitle|count_characters:true}}
cat[连接字符串]
将cat里的值连接到给定的变量后面.它有多个属性
{{$articleTitle|cat:" yesterday."}}
count_paragraphs[计算段数]
计算变量里的段落数量。
{{$articleTitle|count_paragraphs}}
count_sentences[计算句数]
计算变量里句子的数量。
{{$articleTitle|count_sentences}}
count_wordswords[计算词数]
计算变量里的词数。
{{$articleTitle|count_words}}
date_format[格式化日期]
{{$smarty.now|date_format}}
{{$smarty.now|date_format:"%A, %B %e, %Y"}}
{{$smarty.now|date_format:"%H:%M:%S"}}
{{$yesterday|date_format}}
{{$yesterday|date_format:"%A, %B %e, %Y"}}
{{$yesterday|date_format:"%H:%M:%S"}}
输出结果:
Feb 6, 2001
Tuesday, February 6, 2001
14:33:00
Feb 5, 2001
Monday, February 5, 2001
14:33:00
default[默认值]
为空变量设置一个默认值。有多个属性
当变量为空或者未分配的时候,将由给定的默认值替代输出。
{{$myTitle|default:"no title"}}
escape[编码]
用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码,十六进制美化,或者javascript转码。默认是html转码。
{{$articleTitle|escape}}
{{$articleTitle|escape:"html"}}
{{$articleTitle|escape:"htmlall"}}
{{$articleTitle|escape:"url"}}
{{$articleTitle|escape:"quotes"}}
<a href="mailto:{{$EmailAddress|escape:"hex"}}">{{$EmailAddress|escape:"hexentity"}}</a>
indent[缩进]
在每行缩进字符串,默认是4个字符。有多个属性
作为可选参数,你可以指定缩进字符数。
作为第二个可选参数,你可以指定缩进用什么字符代替。
特别提示:使用缩进时如果是在HTML中,则需要使用& n b s p;(空格)来代替缩进,否则没有效果。
{{$articleTitle|indent}}
{{$articleTitle|indent:10}}
{{$articleTitle|indent:1:"\t"}}
lower小写
将变量字符串小写
{{$articleTitle|lower}}
nl2br换行符替换成<br />
所有的换行符将被替换成 <br />.功能同PHP中的nl2br()函数一样.
{{$articleTitle|nl2br}}
regex_replace正则替换
寻找和替换正则表达式 .
欲使用其语法,请参考Php手册中的preg_replace()函数.
{{$articleTitle|regex_replace:"/[\r\t\n]/":" "}}
replace替换
简单的搜索和替换字符串
{{$articleTitle|replace:"Garden":"Vineyard"}}
{{$articleTitle|replace:" ":" "}}
spacify插空
插空(不知道这个词是什么意思,顾名思义了^^)是一种在字符串的每个字符之间插入空格或者其他的字符(串).
{{$articleTitle|spacify}}
{{$articleTitle|spacify:"^^"}}
string_format字符串格式化
是一种格式化字符串的方法.例如格式化为十进制数等等.使用sprintf语法格式化
{{$number|string_format:"%.2f"}}
{{$number|string_format:"%d"}}
strip去除(多余空格)
用一个空格或一个给定字符替换所有重复空格,换行和制表符.
注意:如果想要去除模板文本中的区块,请使用 strip函数
{{$articleTitle|strip}}
{{$articleTitle|strip:" "}}
strip_tags去除html标签
去除<和>标签,包括在<和>之间的任何内容.
{{$articleTitle|strip_tags}}
truncate截取
从字符串开始处截取某长度的字符.默认是80个.
你也可以指定第二个参数作为追加在截取字符串后面的文本字串.该追加字串被计算在截取长度中。
默认情况下,smarty会截取到一个词的末尾。
如果你想要精确的截取多少个字符,把第三个参数改为"true"
{{$articleTitle|truncate}}
{{$articleTitle|truncate:30}}
{{$articleTitle|truncate:30:""}}
{{$articleTitle|truncate:30:"---"}}
{{$articleTitle|truncate:30:"":true}}
{{$articleTitle|truncate:30:"...":true}}
upper大写
将变量改为大写
{{$articleTitle|upper}}
wordwrap行宽约束
可以指定段落的宽度(也就是多少个字符一行,超过这个字符数换行).默认80.
第二个参数可选,可以指定在约束点使用什么字符(默认是换行符\n).
默认情况下smarty将截取到词尾,如果想精确到设定长度的字符,请将第三个参数设为ture
{{$articleTitle|wordwrap:20}}
{{$articleTitle|wordwrap:30:"<br>\n"}}
{{$articleTitle|wordwrap:30:"\n":true}}
组合修改器
对于同一个变量,你可以使用多个修改器。它们将从左到右按照设定好的顺序被依次组合使用。使用时必须要用"|"字符
作为它们之间的分隔符。
{{$articleTitle|upper|spacify}}
{{$articleTitle|lower|spacify|truncate}}
{{$articleTitle|lower|truncate:30|spacify}}
{{$articleTitle|lower|spacify|truncate:30:". . ."}}
内建函数
Smarty自带一些内建函数.
内建函数是模板语言的一部分.
用户不能创建名称和内建函数一样的自定义函数,也不能修改内建函数.
capture
capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面.
任何在 {{capture name="foo"}}和{{/capture}}之间的数据将被存储到变量$foo中,该变量由name属性指定.
在模板中通过 $smarty.capture.foo 访问该变量.
如果没有指定 name 属性,函数默认将使用 "default" 作为参数.
{{capture}}必须成对出现,即以{{/capture}}作为结尾,该函数不能嵌套使用.
{{capture name=banner}}
{{include file="get_banner.tpl"}}
{{/capture}}
{{if $smarty.capture.banner ne ""}}
<tr>
<td>
{{$smarty.capture.banner}}
</td>
</tr>
{{/if}}
config_load
该函数用于从配置文件中加载变量.
{{config_load file="colors.conf"}}
配置文件有可能包含多个部分,此时可以使用附加属性 section 指定从哪一部分中取得变量.
{{config_load file="colors.conf" section="Customer"}}
foreach,foreachelse
foreach 是除 section 之外处理循环的另一种方案(根据不同需要选择不同的方案).
foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比section 简单许多,缺点是只能处理简单数组.
foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性.
name 属性可以任意指定(字母、数字和下划线的组合).
foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一.
from 属性(通常是数组)决定循环的次数.
foreachelse 语句在from 变量没有值的时候被执行.
{{foreach from=$custid item=curr_id}}
id: {{$curr_id}}<br>
{{/foreach}}
{{foreach name=outer item=contact from=$contacts}}
{{foreach key=key item=item from=$contact}}
{{$key}}: {{$item}}<br>
{{/foreach}}
{{/foreach}}
foreach 循环有自己的变量名,使用该变量名可以访问该循环. 使用方法为{{$smarty.foreach.foreachname.varname}},其中 foreachname 即在 foreach 中指定的name 属性.
include
Include 标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中可用. 必须指定 file 属性,该属性指明模板资源的位置.
如果设置了assign 属性,该属性对应的变量名用于保存待包含模板的输出,这样待包含模板的输出就不会直接显示了。
{{include file="footer.tpl"}}
可以在属性中传递参数给待包含模板. 传递给待包含模板的参数只在待包含模板中可见. 如果传递的参数在
待包含模板中有同名变量,那么该变量被传递的参数替代.
{{include file="header.tpl" title="Main Menu" table_bgcolor="#c0c0c0"}}
{{include file="footer.tpl" logo="http://my.domain.com/logo.gif"}}
使用外部模板资源的 include 函数演示
{{include file="/usr/local/include/templates/header.tpl"}}
{{include file="file:/usr/local/include/templates/header.tpl"}}
{{include file="file:C:/www/pub/templates/header.tpl"}}
{{include file="db:header.tpl"}}
include_php
inluce_php 函数用于在模板中包含 php 脚本. 如果设置了安全模式,被包含的脚本必须位于
$trusted_dir 路径下. include_php 函数必须设置 file 属性,该属性指明被包含 php 文件的路径,可以
是 $trusted_dir 的相对路径,也可以是绝对路径.
即使是在模板中多次地调用 php 文件,默认情况下它们只被包含一次. 你可以设置once 属性从而指明每
次调用都重新包含该文件. 如果将once 属性设置为 false,每次调用该文件都将被重新包含.
如果设置了 assign 属性,该属性对应的变量名用于保存待包含 php 的输出,这样待包含 php 文件的输出就不会直接显示了。
{{include_php file="/path/to/load_nav.php"}}
insert
Insert 函数类似欲 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.
{{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}}
在此例中,我们使用了 getBanner 作为 name 属性,同时传递了 #banner_location_id# 和
#site_id# 两个参数. 接下来 Smarty 在你的 php 程序中搜索名为 insert_getBanner() 的函数,
#banner_location_id# 和 #site_id# 的值被组合成一个数组作为函数的第一个参数传递给该函数. 为了
避免函数命名混乱,所有的 insert 函数都必须以 insert_ 开头. 你的 insert_getBanner() 函数根据传递
的参数执行并返回执行的结果. 这些结果就显示在模板中调用该函数的位置. 在此例中 Smarty 调用该函数
类似insert_getBanner(array("lid"=>"12345","sid"=>67890"));并将返回的结果显示在调用的位置.
如果设置了 assign 属性,该属性对应的变量名用于保存待包含函数的输出,这样待包含函数的输出就不会
直接显示了.注意:赋给模板变量的输出信息在缓存的时候同样无效.
如果指定了 script 属性,在调用函数并执行前将先包含(只包含一次)script指定的 php 脚本. 这是为了防
止被调用的函数不存在,先调用包含该函数的 php 脚本将避免该情况.
if,elseif,else
Smarty 中的 if 语句和 php 中的 if 语句一样灵活易用,并增加了几个特性以适宜模板引擎. if 必须于 /if
成对出现. 可以使用 else 和 elseif 子句. 可以使用以下条件修饰词:eq、ne、neq、gt、lt、lte、le、
gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by、
==、!=、>、<、<=、>=. 使用这些修饰词时必须和变量或常量用空格格开.
{{if $name eq "Fred"}}
Welcome Sir.
{{elseif $name eq "Wilma"}}
Welcome Ma'am.
{{else}}
Welcome, whatever you are.
{{/if}}
{{if count($var) gt 0}}
...
{{/if}}
{{if $var is even}}
...
{{/if}}
{{if $var is odd}}
...
{{/if}}
ldelim,rdelim
ldelim 和 rdelim 用于输出分隔符,也就是大括号 "{{" 和 "}}". 模板引擎总是尝试解释大括号内的内容,因此如果需要输出大括号,请使用此方法.
{{ldelim}}funcname{{rdelim}} is how functions look in Smarty!
literal
Literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可
能包含大括号等字符信息的 javascript 脚本. 当这些信息处于 {{literal}}{{/literal}} 标签中时,模板引擎将
不分析它们,而直接显示.
{{literal}}
<script language=javascript>
<!--
function isblank(field) {{
if (field.value == '')
{{ return false; }}
else
{{
document.loginform.submit();
return true;
}}
}}
// -->
</script>
{{/literal}}
php
php 标签允许在模板中直接嵌入 php 脚本. 是否处理这些语句取决于$php_handling的设置. 该语句通常
不需要使用,当然如果你非常了解此特性或认为必须要用,也可以使用.
{{php}}
include("/path/to/display_weather.php");
{{/php}}
section,sectionelse
模板的 section 用于遍历数组中的数据. section 标签必须成对出现. 必须设置name 和 loop 属性. 名称可以是包含字
母、数字和下划线的任意组合. 可以嵌套但必须保证嵌套的 name 唯一. 变量 loop (通常是数组)决定循环执行的次数. 当需
要在 section 循环内输出变量时,必须在变量后加上中括号包含着的 name 变量. sectionelse 当 loop 变量无值时被执行.
{{section name=customer loop=$custid}}
id: {{$custid[customer]}}<br>
{{/section}}
{{section name=customer loop=$custid}}
id: {{$custid[customer]}}<br>
name: {{$name[customer]}}<br>
address: {{$address[customer]}}<br>
<p>
{{/section}}
{{section name=customer loop=$custid}}
id: {{$custid[customer]}}<br>
name: {{$name[customer]}}<br>
address: {{$address[customer]}}<br>
{{section name=contact loop=$contact_type[customer]}}
{{$contact_type[customer][contact]}}: {{$contact_info[customer][contact]}}<br>
{{/section}}
<p>
{{/section}}
遍历多维数组演示
{{section name=customer loop=$contacts}}
name: {{$contacts[customer].name}}<br>
{{/section}}
sectionelse 演示
{{section name=customer loop=$custid}}
id: {{$custid[customer]}}<br>
{{sectionelse}}
there are no values in $custid.
{{/section}}
strip
Web 开发者多次遇到空格和回车影响HTML输出的情形(浏览器的"特性"),为了得到特定的结果,因此你不得不在模板里运行所有
的标签. 通常在难以理解或难以处理的模板中遇到此问题.
Smarty 在显示前将除区任何位于 {{strip}}{{/strip}} 标记中数据的首尾空格和回车. 这样可以保证模板容易理解且不用担心多余
的空格导致问题.
转载于:https://www.cnblogs.com/baogg/articles/2529387.html