Smarty的简单指南文档格式.docx
- 文档编号:22227018
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:11
- 大小:18.38KB
Smarty的简单指南文档格式.docx
《Smarty的简单指南文档格式.docx》由会员分享,可在线阅读,更多相关《Smarty的简单指南文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
;
//设置模板目录
compile_dir="
./templates_c"
//设置编译目录
left_delimiter="
{"
//设置smarty标签左右的标志符号
right_delimiter="
}>
"
assign("
name"
"
ctl"
//进行模板变量替换
str"
hellosmarty!
//
display("
index.tpl"
//编译并显示位于./templates下的index.tpl模板
>
Index.tpl
html>
head>
title>
Inserttitlehere<
/title>
/head>
body>
{$name}>
<
{$str}>
/body>
/html>
output:
ctl,hellosmarty!
(默认的语法标签标志符号是’{’和’}’,与js冲突,所以一般都换成’<
{’和’}>
’,以下所以例子都是使用自定义的标志符号)
实际开发中php不用我们操心,这部分是由rd负责。
我们关心的是tpl,和数据变量(如$name,$str)。
虽然在smarty模版(tpl)中可以嵌入php代码,但是这种做法把本来分离开的逻辑和展现又混淆了,所以是强烈不推荐的。
另外在模版里头嵌入php代码会引起rd的不安(就如同rd写了一段js,嵌入页面中会引起咱们的不安一样)。
Smarty的语法标签
smary中有很多的标签,大多数只适合某些场景,这里列出最常用到的几种
输出变量内容
tpl:
{*str=helloworld!
这是smarty的注释方式*}>
helloworld!
注意:
{…}>
中间不能使用php的函数。
变量调节器
就是字面意思,把变量输出的值按照一定逻辑进行变换。
Smarty提供了很多变量调节器,不过都针对于英文。
count_characters
字符长度。
汉字在gbk方式下长度是2,uft-8方式下长度是3。
{*str=helloworld!
*}>
{$str|count_characters}>
{$str|count_characters:
true}>
//参数true代表是否计算空格
12
11
escape
转义。
{*str=‘hello&
world’*}>
{$str|escape:
”html”}>
//把&
"
'
<
>
变成字符实体
&
#039;
hello&
amp;
world&
regex_replace
正则替换
*}>
{$str|regex_replace:
”/world/”:
”smarty”}>
hellosmarty!
strip
用一个空格或一个给定字符替换所有重复空格,换行和制表符.
{*str=hello\nworld!
{$str|strip}>
组合变量调节器
所有的变量调节器都可以组合使用
{*str=hello&
\nworld!
{$str|strip|escape:
Hello&
world!
条件if,elseif,else
可以使用以下条件修饰词:
eq、ne、neq、gt、lt、lte、le、gte、ge、iseven、isodd、isnoteven、isnotodd、not、mod、divby、evenby、oddby、==、!
=、>
、<
=.使用这些修饰词时必须和变量或常量用空格格开。
逻辑符号同js一致
{if$nameeq"
world"
Hello,world!
.
{elseif$nameeq"
smarty"
Hello,smarty!
{else}>
Hello!
{/if}>
循环foreach,foreachelse
循环简单数组
{*example=[“item0”,”item1”]*}>
{foreachfrom=$exampleitem=theitemname=thename}>
index:
{$smarty.foreach.thename.iteration}>
isfirst:
{$smarty.foreach.thename.first}>
islast:
{$smarty.foreach.thename.last}>
{$theitem}>
{/foreach}>
Output:
iteration:
1
isfirst:
true
islast:
false
item0
2
item1
cycle
用于轮转一组数值。
例如常见的表格隔行变色
{*datas=[1,2,3]*}>
{foreachfrom=$datasitem=data}>
trbgcolor="
{cyclevalues="
#eeeeee,#d0d0d0"
td>
{$data}>
/td>
/tr>
OUTPUT:
#eeeeee"
1<
#d0d0d0"
2<
3<
capture
capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面.tpl:
{captureassign="
avar"
{*$array=['
i1'
'
i2'
i3'
]*}>
{foreachfrom=$arrayitem=theitem}>
{$item}>
{/capture}>
avarvalue:
{$avar|strip}>
i1i2i3
eval
功能类似于js中的eval,就是把变量内容当作模版来解析。
{*str='
'
code='
{evalvar=code}>
smarty与js
smarty不错,灵活应用它所提供的语法标签能够实现绝大部分需求。
不过,有的需求用smarty模板来做的确复杂低效,或者干脆就没办法做到。
这个时候,就靠js了。
简单说就是把模版中的数据拼成json来用js处理。
例1:
smarty的变量调节器提供的截断功能不支持中文。
下面是一个截断的例子。
{*str="
一二三四五六七八九"
script>
functiontruncation(str){
for(varj=0,c=0;
j<
str.length&
c<
10;
j++){
c++;
if(str.charCodeAt(j)>
128){
}
}
returnstr.substr(0,j)+(str.length>
j?
.."
:
}
/script>
document.write(truncation("
html}>
)));
一二三四五..
例2:
需求:
一组数据分两列显示,数据过长时需要换行。
两列要对齐,不能有空行。
这里需求什么,js实现了什么不重要,只要知道这里的数据的展现繁杂一点,需要js来参合。
{*datas=[xxxxxxx,xxxx,xxxx....]*}>
scripttype="
text/javascript"
functioncreat3mulu(array){
varc=0;
for(vari=0,l=array.length;
i<
l;
i=i+2){
if(array[i]>
42){
varbanl=Math.round(c/2);
varleft=[];
varright=[];
left.push("
divstyle='
float:
left'
right.push("
c=0;
if(c<
=banl){
left.push(array[i+1]);
}else{
right.push(array[i+1]);
/div>
)
returnleft.join("
)+right.join("
json"
[<
{foreachname=aforeachfrom=$datasitem=data}>
$data|count_characters>
"
div>
{$data|strip|escape:
div/>
{if$smarty.foreach.aforeach.last!
=true}>
]
var__tempHtml=creat3mulu(<
{$json|strip}>
document.write(__tempHtml);
这里面比较有价值的代码是
这部分作用就是拼出一个js数组出来,拼出来的内容并不输出,而是储存在一个变量json中,以便后面的模板使用。
[10,"
..<
50,"
.....]
把这段代码稍加修改就是拼一个jsonobject出。
{<
{foreachname=aforeachfrom=$datasitem=datakey=key}>
{$key|escape:
quotes}>
}
10"
content0"
50"
content1"
.....}
这部分模板作用是拼出一个js字符串。
可以想象的到如果data变量中有回车,双引号,那么肯定会报js错误。
变量调节器|strip|escape:
html就是去换行和字符实体转义(血淋淋的经验啊)
这里面$json就是前面拼好的json,不过里面含有大量的换行,$json|strip去换行。
我个人觉得为了效率,用js作为smarty模板的补充,用smarty来拼结构简单的json串很不错,也非常高效。
但是如果json格式比较复杂,拿模板来拼json一方面加大了工作量,一方面也增加了风险,提高了出现bug的概率。
所以,如果需要json非常复杂,还是要与rd商定接口,让rd来提供json。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Smarty 简单 指南