{*
{extends file='blockparent.tpl'}
*}
{*必须放在模板的第一行,如果要用子模板来扩展父模板,那么它只能有{block}的区域任何其他模板的内容将被忽略*}
{config_load file='config.conf'}{*载入配置文件*}
<html>
<head>
<meta charset='utf-8' />
<style type="text/css">
.nav{
margin-left:40px;
}
</style>
<!--访问普通变量-->
<title>{$title}</title>
</head>
<body>
<div>
<!--smarty注释-->
{*访问索引数组*}<span>访问索引数组:</span>
{$arr1[0]}
</div>
<div>
{*访问关联数组*}<span>访问关联数组:</span>
{$arr2.name}
</div>
<div>
<span>访问二维数组:</span>
{$arr3.world.china}
</div>
<div>
<span>访问配置文件变量:</span>
{#webname#}
</div>
<div>
<span>保留变量:</span>
<div class="nav">
<!--<span>POST</span>{* $smarty.post.page *}相当于$_POST['page'],GET类似-->
{*
$smarty.server.SERVER_NAME;相当于$_SERVER['SERVER_NAME']
*}
<span>SERVER:</span>
{$smarty.server.SERVER_NAME}
{*
类似的操作有env,session,requirest等
*}
</div>
<div>
<span>变量修饰器</span>
<div class="nav">
<span>capitalize:</span><br>{*格式化单词*}
<span class='nav'>{$str|capitalize}{*默认*}</span><br>
<span class='nav'>
{$str|capitalize:true}</span><br>{*带数字的开头是否大写,第二个参数,首字母后面的是不是小写*}
<span class='nav'>
{$str|capitalize:true:true}{*多个参数用冒号隔开*}</span>
<br>
<span>cat:</span><br>{*字符串连接函数*}
<span class='nav'>
{$str1|cat:'huge!'}
</span><br>
<span>count_characters:</span><br>{*计算字符数*}
<span class='nav'>
{$str|count_characters}
</span><br>
<span class='nav'>
{$str|count_characters:true}{*包含空格*}
</span><br>
{*
类似函数有,count_paragraphs:计算段落数,以换行符为标识
count_sentences:计算变量有多少个句子。每个句子必须以点号、问号或者感叹号结尾
count_words:计算变量内容有多少个单词
*}
<span>count_paragraphs:</span>
<div class='nav'>
{$str2}<br>
{$str2|count_paragraphs}
</div>
<span>date_format:</span><br>{*格式化日期的显示*}
<span class='nav'>
{$smarty.now|date_format:'%Y-%m-%d %l:%M:%S %p'}{*12小时制*}
{*%T等价于%H:%M:%S,24小时制*}
{*%p:只显示AM或PM;%r:等价于%l:%M:%S %p*}
</span><br>
{*其他变量修饰器:
default:设置默认值,当变量未定义或为空时,启用,需要传入默认值
escap:可用于将变量编码成html,url,单引号,16进制,16进制实体,javascript和电子邮件,默认是html
unescap:escap的解码函数
indent:代码缩进,默认是4个空格,可以自行设置数目和类型,但页面显示无效果,只支持代码缩进
lower:将字符串转换为小写
upper:将变量转换为大写字母
nl2br:将变量值中'\n'转换为<br>
regex_replace:用正则表达式搜索和替换变量值,参数分别是正则表和要替换的字符达式
replace:对变量进行简单的搜索和替换,同上,只是第一个参数直接是字符串
spacify:会在变量的字符串中插入空格,可以设置插入字符的类型
string_format:格式化字符串,如浮点数,指定哪种格式,springf()
strip:转换连续空格,回车和tab到单个空格或是指定的字符串
strip_tag:去除标记等包含在<和>中间的字符,参数bool值,指定是否将标签转换为空格
from_charset:将变量值转换为当前的字符集
to_charset:可将变量值由当前的内置字符集转换到指定的字符集
truncate:截取字符串到指定的长度,默认是80,截取后字符的长度是截取规定的长度加上第二个参数的字符长度,参数1,长度,默认80,参数2,替代显示字符,默认...,参数3,是否按单词截取,默认true,参数4,当字符截取度刚好等于字符本身的长度时,是否截取,默认true
wordwrap:限制一行字符的长度(自动换行)默认是80,参数1,行长度,参数2,换行符,默认'\n',参数3,设置按单词换行(false,默认),还是按字符换行(true)
*}
</div>
<div>
{*多个修饰器用|隔开,按从左到右,依次作用于变量*}
<span>复合变量修饰器</span><br>
<div class='nav'>
<span>upper,truncate:</span><br>
{$str1|truncate:10|upper}
</div>
</div>
<div>
<span>内置函数:</span>
<div class="nav">
<span>appand</span>{*在运行时为数组变量增加或创建值*}<br>
<span class='nav'>
{append var='arr' value='元素1' index='first'}
The first name is {$arr.first}
</span><br>
<span>assign</span><br>{*在模板运行时,给变量赋值*}
<span class='nav'>
{assign var='name' value='huge'}
The Name is {$name}
</span><br>
<span>block:</span><br>
{*
可以再模板上定义一块区域,以进行模板继承,参数1,模板区域名称;参数2,append:区域代码将附加到父母版{block}内容之后,参数3,prepend:之前,hide在没有该名称区域时,忽略区域内容,nochache:关闭缓冲,可以通过$smarty.block.parent和$smarty.block.child来获取父元素和子元素
*}
<div class='nav'>
{literal}会重写当前的文档流
{extends file='blockparent.tpl'}
{block name='pblock'}childblock{/block}{*直接覆盖父元素*}
{block name='pblock' append}appendchildblock{/block}{*置于父元素后面,prepend用法类似*}
{block name='pblock' }{$smarty.block.parent}{/block}
{*获取父元素中的全部内容,包括不在block中的内容,$smarty.block.child*}
{/literal}
{*literal:将标签内的内容原样输出*}
</div>
<span>call:</span><br>
{*
可以调用一个通过{function}标签定义的模板函数,参数1,name,函数名;参数2,
*}
{function name='myfun'}
this is a function标签
{/function}
<span class='nav'>
{call name='myfun'}
</span>
<br>
<span>capture:</span><br>
<span class='nav'>
{capture name='mycap'}This is a capture{/capture}
{$smarty.capture.mycap}
</span><br>
<span>for:</span><br>
<span class='nav'>
{for $i=20 to 10 max=3}{*简单的for循环,max,可选,设置最大循环次数*}
item{$i}
{forelse}没有循环时,显示的内容。
{/for}
</span><br>
<span>if:</span><br>
<span class='nav'>
{if $myname eq 'huge'}
welcome huge!
{elseif $myname=='萍儿'}
welcome 学姐
{else}
对不起,不为外星人提供服务!
{/if}
</span><br>
<span>include:</span><br>
<div class="nav">
{include file='include.tpl' title='名单'}
</div>
{*
{ldelim}:左定界符
{rdelim}:右定界符
这样直接在浏览器输出这两个定界符,不进行解析
*}
<span>nocache:</span><br>{*关闭局部缓冲*}
{nocache}
<span class='nav'>
{$smarty.now|date_format:'%T'}
</span>
{/nocache}<br>
<span>section:</span><br>
<span class='nav'>
{section name='sc' loop=$arr1 start=0 step=1 max=3 show=true}
{$arr1[sc]}
{sectionelse}
控数组
{/section}
</span><br>
<span>strip:</span><br>{*过滤多余空格和回车,使页面内容在一行显示*}
<span class='nav'>
{strip}
<table border='0'>
<tr>
<td>
<a href="#">
<font color="red">This is a test</font>
</a>
</td>
</tr>
</table>
{/strip}
</span>
<span>while:</span><br>
<span class='nav'>
{while $len>1}
item{$len--}
{/while}
</span>
</div>
</div>
</div>
<div>
<span>自定义函数</span><br>
<div class="nav">
<span>counter:</span>{*计数器*}
<div class="nav">
{counter name='cal' start=0 skip=2 assign='abc'}
{counter} {counter} {$abc}
</div>
<span>cycle:</span>
{*
交替循环一系列值
name:交替循环的名称
values:交替遍历的值,可以使逗号隔开的字符串或数组
print:是否显示,默认true
advance:是否递进到下一个值
delimiter:values属性使用的限定符
assign:赋值的变量名
reset:交替循环将重置回到最前面的值,而不是递进
*}
{for $i=0 to 5}
<div style="background-color:{cycle values='red,green,blue,yellow'}">第{$i}行</div>
{/for}
<span>eval:</span>{*var 需要执行的变量或字符串,assign分配给某个变量*}
{eval var=$str1}<br>
<span>fetch:</span>{*抓取本地换外网上的网页*}
<div class="nav">
{*
{fetch file='http://www.baidu.com/'}
*}
</div>
<span>html_checkboxes:</span>
<div class="nav">
{html_checkboxes name='cbx' options=$arr4 selected=1001 separator='<br>'}
</div>
{*类似的标签还有
html_p_w_picpath:file:路径,height,width:显示高度和宽度,alt,href:链接地址,如果设置会在外围加上a标签,path_prefix,使用该标签在不开启缓冲的情况下,会降低性能
html_options:values,数组;output:下拉显示的数组,selected:选中项;name:select组的名称;options:键值对数组,用于下拉框
html_radios:同html_checkboxes
html_date,html_time:显示日期、时间,参数比较多
html_table:用数组的形式创建一个表格
mailto:创建一个mailto链接
math:在模板中进行一些数学运算
text_format:格式化文本的块函数
*}
<span>html_date:</span>
<div class="nav">
{html_select_date prefix='日期' start_year='-5' end_year='+1' month_format='%m' field_order='YMD'}
</div>
<span>html_time:</span>
<div class="nav">
{html_select_time}
</div>
<span>html_table:</span>
<div class="nav">
{html_table loop=$arr5 cols='列1,列2,列3' table_attr='border="0"' tr_attr=$tr inner=rows hdir=left caption='表头'}
</div>
</div>
</div>
<div>
<span>注册类</span><br>
<div class="nav">
{myclass::$property}
</div>
</div>
<div>
<span>注册函数</span><br>
<div class="nav">
{my_fun param=huge}
</div>
</div>
<div>
<span>注册块函数</span><br>
<div class="nav">
{mybk background-color=yellow}
这是一个块函数
{/mybk}
</div>
</div>
<div>
<span>自定义函数</span><br>
<div class="nav">
{myfuninfo name=huge}
</div>
</div>
</div>
</html>
{*
{debug}:显示数据页面中各个已赋值变量的名称和值
*}
目录结构: