Smarty数据、模版创建指引
Smarty数据、模版创建指引
1、数据的创建
信息描述的格式:
{"name":"商品链接","nick: "itemUrl","type":"url","data":[],"dataFormat":"1019"}
name: 描述信息的名称,可自由df确定
nick: 文本替换的标记(英文数字),如模版中使用{#$itemUrl#}对应此条标记
type: 描述的类型,现支持text,textarea,url,img,date,select,radio,checkbox,level
data: 当type为select,radio,checkbox时有效数组中的元素为{“name”:”标签”,”value”:”替换值”}
dataFormat:当type为level时有效,表示描述为一个嵌套内容时,所选用的格式。值可为已经存在的数据id。
2、模版的创建
1) 变量输出
当数据为:
{“name”:”商品链接”,”nick”:””,”type”:”url”}, {“name”:”商品图片”,”nick”:”itemImg”,”type”:”img”}, {“name”:”商品名称”,”nick”:”itemName”,”type”:”text”}, {“name”:”商品价格”,”nick”:”price”,”type”:”text”}
结合构建稿可设计模版:
<li> <a href=“{#$itemUrl#}”>
<span>{#$itemName#}</span>
<img src=“{#$itemImg#}” />
<span>{#$price#}</span>
</a></li>
{#$xxxxx#},$xxx为描述信息的nick值
2) 模版功能标签
a) 当需要指定循环范围时
使用标签
{#section name=sn loop="$news"#}
{#sectionelse#}there is no data.
{#/section#}
For example:
<div>
<span>{#$itemName#}</span> 此处不替换
<ul>
{#section name=sn loop="$news"#}
<li> <a href=“{#$news[sn].url#}”> 此处可正常替换
<span>{#$news[sn].itemName#}</span>
<img src=“{#$news[sn].img#}” />
<span>{#$news[sn].price#}</span>
</a></li>
{#/section#}
</ul>
</div>
b) 当需要指定下一级嵌套内容的循环范围时
使用标签
{#section name=sn loop="$news"#}
{#sectionelse#}there is no data.
{#/section#}
1、section中的属性
name:(必选) 是section循环的名称只是标示循环唯一的名字没有特别意义,前面没有$符号;
loop: (必选)是在php声明中的变量名称,用来标示是循环哪一个数组(即要循环数组名)需要使用$;
start: (可选)循环执行的初始位置. 如果该值为负数,开始位置从数组的尾部算起. 例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5. 非法值(超过了循环数组的下限)将被自动调整为最接近的合法值.
step: (可选)如其它语言的循环,是一个步长,如果为负数,则倒序循环;
max:(可选)循环的最大下标,如果是1则只循环1次,如果为2则循环2次;
show:(可选)默认为true即显示。如果设置了{sectionelse}。表示如果数组没有内容的时候显示这部分的内容;如果show为false则显示这部分。如果没有设置{sectionelse}则不输出该数组。
2、section中的变量
index:用于显示当前循环的索引,从0开始(如果指定了start属性,那么由该值开始),每次加1(如果指定了step属性,那么由该值决定).如果没有指定step和start属性,此值的作用和iteration类似,只不过从0开始而已.
index_prev:用于显示上一个循环索引值. 循环开始时,此值为-1.
index_next:用于显示下一个循环索引值. 循环执行到最后一次时,此值仍然比当前索引值大1(如果指定了step,取决于此值).
iteration:用于显示循环的次数.iteration 不像index属性受start、step和max属性的影响,该值总是从1开始(index是从0开始的).rownum 是iteration的别名,两者等同.
first:如果当前循环第一次执行,first 被设置为true.
last:如果当前循环执行到最后一次,last 被设置为true.
rownum:用于显示循环的次数. 该属性是iteration的别名,两者等同.
loop:用于显示该循环上一次循环时的索引值. 该值可以用于循环内部或循环结束后.
show:是 section 的参数. show 取值为布尔值 true 或 false. 如果设置为 false,该循环将不显示. 如果指定了 sectionelse 子句,该字句是否显示也取决于该值.
total:用于显示循环执行总的次数. 可以在循环中或执行结束后调用此属性.
{“name”:“链接组合", "nick":"urlLevel", "type":"level","dataFormat":[
1139]}, {“name”:”商品名称”,”nick”:”itemName”,”type”:”text”}
1139:
{“name”:“链接名称”, “nick”:“urlName”, “type”:“text“},
{“name”:“链接Url", "nick":"url", "type":“url“}
示例模版:
<div>
<span>{#$news[sn].itemName#}</span>
<ul>
{#section name=sn loop="$news"#}
<li> <a href=“{#$news[sn].dataFormat.url#}”>
<span>{#$news[sn].dataFormat.urlName#}</span>
</a></li>
{#sectionelse#}there is no data.
{#/section#}
</ul>
</div>
c) 当需要条件判断时
使用条件判断标签 {#if xxx#} 和 {#else#} {#/if#},xxxx为php条件表达式
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、==、!=、>、<、<=、>=. 使用这些修饰词时必须和变量或常量用空格格开.
eq相等,
ne、neq不相等,
gt大于,
lt小于,
gte、ge大于等于,
lte、le 小于等于,
not非, mod求模。
is [not] div by是否能被某数整除,
is [not] even是否为偶数
$a is [not] even by $b即($a / $b) % 2 == 0,
is [not] odd是否为奇,
$a is not odd by $b即($a / $b) % 2 != 0
示例模版:
{#if $count is div by 4#}
</tr><tr>
{#/if#}
<div>
<ul>
{#section name=sn loop="$news"#}
<li> <a href=“{#$news[sn].url#}”>
<span>{#$news[sn].itemName#}</span>
<img src=“{#$news[sn].itemImg#}” />
<span>{#$news[sn].price#}</span>
</a></li>
{#if $smarty.section.sn.last == true #}
最后一个内容才会有</li>
{#/if#}
{#$news[sn].itemName == “abc”#}
<li>商品名称是abc</li>
{#/if#}
{#/section#}
</ul>
</div>
d) 当需要使用表达式输出值时
smarty变量操作符
capitalize [首字母大写]
count_characters [计算字符数]
cat [连接字符串]
count_paragraphs [计算段落数]
count_sentences [计算句数]
count_words [计算词数]
date_format [时间格式]
default [默认]
escape [转码]
indent[缩进]
lower[小写 ]
nl2br[换行符替换成<br />]
regex_replace[正则替换]
replace[替换]
spacify[插空]
string_format[字符串格式化]
strip[去除(多余空格)]
strip_tags[去除html标签]
truncate[截取]
upper[大写]
wordwrap[行宽约束]