版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.4、Smarty语法基础篇4.1 变量模板中的变量主要来源有三种。1、是由原php文件中分配过来的。$smarty->assign('name','韩灵稚'); #在源php文件中分配<span>你好, $name</span> #在模板文件中使用2、是由配置文件中分配过来的。$smarty->configLoad(“configs/my.conf”) #在源php文件中载入配置文件,也可以在模板中载入<span styl
2、e="color:#fontcolor#; font-size:#fontsize#;">这是#gv#</span><br /> #在模板文件中使用3、是在模板文件中创建的。assign var="name" value="韩灵稚" nocache=”false”scope=”global” #在模板中定义的变量,如果之前定义了相同的变量,则以最后一次定义为准。$name="韩灵
3、稚" #给变量直接赋值,如果该变量原来不存在,自动创建,3.0新特性。assign var=foo value=1,2,3 #定义普通数组变量assign var=foo value='y'=>'yellow','b'=>'blue' #定义关联数组assign var=foo value=1,9,8,
4、3 #定义数组中的数组$foo=1 #增加变量数组$foo的一个元素<span>你好, $name</span> #在模板文件中使用【相关函数】$smarty->getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) #获得变量,仅限于获得第一种方式的变量$smarty->getTem
5、plateVars($varname = null, $_ptr = null, $search_parents = true) #获得变量,可以获得第一种和第三种方式的变量(第三种方式变量scope必须为global或者parent),如果想获得配置变量参看3.44.2 Smarty保留变量 Smarty系统中保留了一些内置变量,可以快速访问相应的变量。但是不能再源php中获得这些变量。1、请求访问变量(Request variables)$smarty.ge
6、t.变量 #显示通过get方式传过来的指定变量的值。$smarty.post.变量 #显示通过post方式传过来的指定变量的值。$smarty.cookies.变量 #显示通过cookie中指定变量的值。$smarty.server.SERVER_NAME #显示server变量值,phpinfo()中$_SERVER系列变量$smarty.env.PATH #显示系统环境变量值,php
7、info()中$_ENV系列变量$smarty.session.变量 #显示session中指定变量的值$smarty.request.变量 #显示通过post、get、cookie中指定变量的值。2、时间访问变量$smarty.now #显示unix系统时间戳,需要变量调节器格式化,参看4.2.4,也可以使使用time()3、常量访问变量$smarty.const._MY_CONST_VAL #访问php中的常量包括自定义常量和系统常量4、$smarty.capture 参看4.4.15、配置访问变量$smarty.config.配置变量
8、0; #访问配置变量,等同于 #配置变量# 方式6、$smarty.section, $smarty.foreach 参看4.4.3和4.4.47、$smarty.template #显示模板路径和名称4.3 变量操作4.2.1赋值 $name = 新值 比如,$name=”我的名字叫韩灵稚” #新值将替代原值,如果原来无该变量,则创建变量并赋值。配置变量无法重新赋值。$name = 表达式 比如,$nam
9、e = 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.2.2访问 最简单的访问方法是 $var,配
10、置变量访问是#configvar#数组变量的访问可以是$array11,也可以支持$array.1.1对象的访问$object->method1($x),也支持对象链,$object->method1($x)->method2($y)字符串与变量的混合输出"大家好,我是$name<br />" #Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线。"大家好,我是$name$obj->a<br />"
11、60; #中括号、句号. 对象相关 -> ,必须将变量用两个符号括起。4.2.3变量名变量 与php相同,都支持在变量名称中使用变量,smarty还支持使用表达式。$foo #一个普通的变量$foo_$bar #变量名中包含变量$foo_$x+$y #变量名中可以支持表达式$foo_$bar_buh_$blar #变量名包含多个变量4.2.4变量调节器 变量调节器主要是对变量进行格式化
12、。$var|capitalize #将变量首字大写$var|count_characters:false #计算变量里的字符数,false为不计算空格。若变量为数值则为数字和小数点等其他运算符的总和$var| cat:var2 #将var2连接到var,若为数值以字符串处理。$var| count_paragraphs #计算变量里的段落数量,已“n“区分$var| count_sentences #计算变量中句子的数量,不好使$var| count_words #计算变量中单词的数量 已非字母和
13、数字的字符分割统计$var| date_format :"%H:%M:%S" #格式化变量日起,具体参数看chm文档$var| default:"no title" #当变量为空时,为变量提供一个默认值$var| escape:url #对变量值进行转码,具体参数看chm文档$var| indent:10:"*" #对变量指定具体字符进行缩进,若为空格在html中不会显
14、示出来,具体参数看chm文档$var| lower #将变量小写$var| nl2br #将变量中的“n“转换成”<br />“$var| regex_replace:"/rtn/":" " #将变量中的符合正则的内容替换成指定内容$var| replace:"Garden":"Vineyard" #将变量中要求的内容替换成指定内容$var| spacify:"&q
15、uot; #将变量字符与字符之间插入指定内容,包括空格$var|string_format:"%d" #将变量中的内容格式化,格式化参数同printf$var| strip: "*" #用一个空格或一个给定字符替换所有重复空格,换行和制表符$var| strip_tags #删除变量中的html标记, 去除<和>标签,包括在<和>之间的任何内容$var| truncate:30:".":true
16、0; #截取变量的到规定的长度,具体参数看chm文档$var| upper #将变量大写$var| wordwrap:30:"n":true #规定指定的长度强制换行,具体参数看chm文档修改器可以复合组合。$articleTitle|lower|spacify|truncate:30:". . ."设置默认变量调节器$smarty->getDefault_modifiers()
17、60; #默认为空数组$smarty->setDefault_modifiers(array('spacify:""','capitalize') #设置变量的默认调节器,必须用arrayname #模板变量name自动加入上面两个调节器同时也可以定义自己的调节器,详情请参考6.7.4和.5变量作用域(未写) 4.4 内建函数4.4.1 capture capture函数的作用是捕获模板输出的数据并将
18、其存储到一个变量里,而不是把它们输出到页面.任何在 capture name="foo"和/capture之间的数据将被存储到变量$foo中。这样可以根据实际情况,选择性的输出一些内容,输出的语法是$smarty.capture.变量。capture name="bottom"include file="bottom.tpl" nr="这是底部的内容"/Captureif true #进行条件判断,确定是否输出$smart
19、y.capture.bottom/if4.4.2 config_load 参看 foreach,foreachelse foreach 适合于简单数组(元素类型相同)foreach name=名称 item=内容 key=键 from=数组 #2.0中的用法,3.0沿用正常执行foreachelseFrom变量数组没有值时(0个元素)执行。/foreach例子:foreach name=for1 item=num from=$foo$smarty.forea
20、ch.for1.index+1个元素:$num<br />if is_array($num)foreach name=for2 item=num2 key=key2 from=$num$str|cat:$smarty.foreach.for2.index+1|cat:"个元素:"|cat:$num2|cat:" key是"|cat:$key2|indent:1:"."<br />/foreach/ifforeachelse$smar
21、ty.foreach.for1.index+1个元素:没有值!<br />/foreachforeach的内置变量$smarty.foreach.foreachname.index #(循环内部使用)显示当前循环的索引,如果数组为空,返回-1$smarty.foreach.foreachname. iteration #(循环内部使用)显示当前的循环次数$smarty.foreach.foreachname.first #(循环内部使用)如果为第一次循环,返回true$smarty.
22、foreach.foreachname.last #(循环内部使用)如果为最后一次循环,返回true$smarty.foreach.foreachname.total #(循环内外部使用)显示循环的总次数foreach 在3.0中做一定的升级,语法更接近于php,内置变量也更简洁。foreach $myarray as $var./foreachforeach的内置变量,均可在内外部使用$varkey #输出元素的键值,简单为
23、012,关联为具体键值。$variteration #显示当前的循环次数,外部使用为最后一次$varindex #显示当前循环的索引,如果数组为空,返回-1,外部使用为最后一次$vartotal #显示循环的总次数$varfirst &
24、#160; #如果为第一次循环,返回true$varlast #如果为最后一次循环,返回true4.4.4 section,sectionelse section适用于复杂的数组操作,不适合关联数组。但是在3.0中并为对他做什么升级和修改,而是直接推出了for命令,for更接近于php语法。可以预见,section将在未来版本中淘汰。section name=名称 loop=循环数组(次数)
25、 start=开始(0) step=步阶(1) max=最大循环次数 show=是否显示(true) #2.0中的用法,3.0沿用正常执行sectionelseloop数组没有值时(0个元素)执行。/section 例子:section name=sec1 loop=$foo step=1 start=0 show=true第$smarty.section.sec1.index+1个元素:$foosec1 循环次数是$smarty.section.se
26、c1.iteration<br />if is_array($foosec1)section name=sec2 loop=$foosec1 step=1 start=0 show=true第$smarty.section.sec2.index+1个元素:$foosec1sec2 循环次数是$smarty.section.sec2.iteration<br />/section/ifsectionelse$smarty.section.sec1.index个元素:没有值
27、!<br />/sectionSection的内置变量与foreach 相同。4.4.5 include include file="包含文件" var=”自定义传入包含文件的变量”assign=” 指定一个变量保存待包含模板的输出”如果规定了assign ,则包含文件不会马上输出,模板输出的数据将存储到assign指定的变量里, 这样可以根据实际情况,再输出包含文件的内容。原理类似于capture。4.4.6 include_php include_php fi
28、le="包含文件" once=”是否指包含一次(true)”assign=” 指定一个变量保存待包含的输出”包含php文件,包含的文件正常编译,并提供输出。如果规定了assign ,则包含文件不会马上输出,输出的数据将存储到assign指定的变量里, 这样可以根据实际情况,再输出包含文件的内容。4.4.7 insert Insert最大的特点是不缓存。他的参数可能会缓存。但是insert所调用的函数内部不缓存。insert name=”函数名称” script=”包含函数的脚本”var.=”函数参数”
29、160;assign=” 指定一个变量保存调用的输出”Insert调用的函数有特别的规定,函数格式必须是“smarty_insert_函数名称($params,&$smarty)”,从insert传入的参数,会统一放到数组变量中,参数名为该数组的键值。例子:insert name="maxnum" script="s2.php" x=12 y=13 assign=nn #模板文件,script为保存调用函数的脚本foreach $nn
30、;as $n$n/foreach function smarty_insert_maxnum($arr) #函数脚本文件return $arr'x'>$arr'y'?$arr'x':$arr'y'如果规定了assign ,则调用函数的记过不会马上输出,输出的数据将存储到assign指定的变量里, 这样可以根据实际情况,再输出包含文件的内容。Insert也可以定义成组件,写入组件库中,详情请参考.8 if,e
31、lseif,else if $name eq "Fred"Welcome Sir.elseif $name eq "Wilma"Welcome Ma'am.elseWelcome, whatever you are./if这个没有什么太好说的。比较操作符可以是 “=、>=”等,也可以是”eq、ne”等,这个看手册吧。4.4.9 ldelim,rdelim 这个也很简单,分别替换smarty当前规定的左边界符和右边
32、界符。一般成对使用。4.4.10 literal Literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息。该特性用于显示有可能包含大括号等字符信息的 js、css 。当这些信息处于 literal/literal 标签中时,模板引擎将不分析它们,而直接显示。4.4.11 strip Smarty 在显示前将除去任何位于 strip/strip 标记中数据的首尾空格和回车。4.4.12 php php 标签允许在模板中直接嵌入 php
33、160;脚本。 php标签默认是关闭的,可以通过如下方式打开$smarty->setAllow_php_tag(true) #设置开启识别php的标签$smarty->getAllow_php_tag() #获得当前对php的支持状态4.4.13 for,while 这是3.0新增的函数。语法类似于php,这两个函数都不适合关联数组for $x=0, $y=count($foo); $x<$y; $x+
34、 . /forfor $x=0 to count($foo)-1 step 1第二种方法,支持for的内置变量。第一种不支持。$xiteration #当前循环次数$xtotal #总循环次数$xfirst #循环第一次$xlast #循环最后一次 while true./while While没有内置
35、变量。4.5 系统自定义函数4.5.1 assign assign var="name" value="韩灵稚" nocache=”false”scope=”global” #在模板中定义$smarty->assign($tpl_var, $value = null, $nocache = false, $scope = SMARTY_LOCAL_SCOPE) #在p
36、hp文件中定义nocache决定了是否需要不缓存该变量(前提是需要启动缓存)。scope 决定了变量的作用范围,有global、parent、local【相关函数】$smarty->assignGlobal($varname, $value = null, $nocache = false) #直接分配一个全局的变量$smarty->assignByRef($tpl_var, &$value, $nocache = false,
37、160;$scope = SMARTY_LOCAL_SCOPE) #分配一个引用变量,适合传递的变量较大,比如对象类型,可以防止内存拷贝。$smarty->clearAssign($tpl_var) #清楚特定的变量$smarty->clearAllAssign() #清除所有分配的变量 4.5.2 append 3.0新增的函数,向模板中分配的变量,该变量可以接受多个值,从而成为变量数组。$smarty->append($tpl_va
38、r, $value = null, $merge = false, $nocache = false, $scope = SMARTY_LOCAL_SCOPE) #php文件中append var="name" value="2" #模板文件中例子:$smarty->assign('nh', &
39、#39;var1); #分配一个变量模板,值为var1$smarty->append('nh','var2'); #对同一个变量,在追加一个值。nh模板变量为数组。$nh0 #在模板文件中使用第一个值$merge,应该是是否合并原值,目前版本测试的时候,不起任何作用。【相关函数】$smarty->appendByRef($tpl_var, &$value, $merge = false) #添
40、加一个引用变量到模板变量中,$merge不起作用。4.5.3 counter 计数器。当第一次出现counter时开始计数,每次出现counter按照规定的计数。counter start=开始(1) skip=步阶(1) direction=递增/递减(up/down) print=是否显示(true) assign=输出给模板变量counter除了start和assign ,其他属性的设置,会对一下次的counter起作用。如果规定了assign ,则包含文件不会马上输出,模板输出的数据将存储到assign指定
41、的变量里, 这样可以根据实际情况,再输出包含文件的内容。4.5.4 cycle 用于轮转使用一组值。当第一次出现cycle时开始,每次出现cycle轮换每个值。cycle name=名称 values=一组值 print=是否输出(true) advance=是否使用下一个值(true) delimiter=一组值中的分隔符(,) assign=输出给模板变量4.5.5 debug 什么也不说了,一个字强大。用了你就知道了,在需要设断点的地方写入debug如果使用fetch(),则debug失效。只能使用
42、display()。debug output=输出的格式(javascript/html) #模板声明调试,,可以选择输出的方式默认是js窗口。$smarty->getDebugging() #得到当前是进行调试,默认false$smarty->setDebugging(true) #对后续调用的模板进行调试。$smarty->getDebug_tpl() #获得调试所需要的tpl模板,可以自己修
43、改。$smarty->setDebug_tpl('new_debug.tpl') #重新指定新的用于调试的模板 4.5.6 eval eval 按处理模板的方式计算取得变量的值。个人感觉用处不大,对缓存支持不好。4.5.7 fetch fetch 用于从本地文件系统、HTTP或FTP上取得文件并显示文件的内容。如果文件名称以"http:/"开头,将取得该网站页面并显示。如果文件名称以"ftp:/"开头,将从ftp服务器取得该文件并显示。fetch
44、160;file="/export/httpd/fetch file="ftp:/user:passwordfetch file="if $weather ne ""<b>$weather</b>/if调用的文件内容,如果能被html解析,则会输出解析内容【相关函数】$smarty->fetch($template, $cache_id = null, $compile_id = null, $p
45、arent = null) #将模板输出的内容放入变量中,供以后使用,如果规定了编译id,比如3,则编译后的文件名称为“3常规名称”,缓存id同理。$output = $smarty->fetch("index.tpl");/ do something with $output here/ 对将要输出的内容进行处理echo $output; 4.5.8 math math 允许模板设计者在模板中进行数学表达式
46、运算.math equation=自定义公式 var=变量值 format=结果格式化字符串 assign=输出给模板变量4.5.9 popup_init,popup 输出javascript窗口。popup_init src="/javascripts/overlib.js" #popup_init载入js文件,必须的。popup text=”弹出信息” #个人感觉意义不大,参数很多,可以看chm4.5.10 textfor
47、mat textformat 用于格式化文本。该函数主要清理空格和特殊字符,对段落按单词边界换行和行缩进等段落格式化处理。与变量调节器类似,优点是可以调整段落,参数具体看文档。textformat 修改参数.需要修改的段落/textformat4.5.11 html_checkboxes 根据函数生成checkboxes(多选)页面元素。html_checkboxes name=名称(checkbox) values=值数组 ouput=显示数组 selected=已显示的元素
48、或者数组,数组值为values options=代替(value+output)可用关联数组 separator=分隔每个复选按钮的字符串 label=是否为每个复选按钮添加 <label> 标签(true) assign var=cb_values value=1,2,3,4,5,6 scope="global"assign var=cb_content value='北京','广州','天津','石家庄','太原','济南' scope="global"assign var=cb val
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保证书法律纠纷处理办法
- 农村住宅建设协议
- 代理出口权责协议示例
- 门业检测设备购销合同
- 游泳安全大家关心
- 不再打牌关爱家人
- 快运物流配送协议
- 施工项目协议书
- 面粉购销合同协议
- 联营合伙协议书
- 2022深蓝色商务蓝大气时尚工作计划总结通用PPT模板
- 五年级上册数学课件 -《平行四边形的面积》 人教版(共15张PPT)
- 因果分析步骤和实例讲解
- 护理教育学第7章护理教学的组织形式2021课件
- 第8章材料的蠕变
- 工作循环分析JCA通用PPT课件
- 硬笔书法兴趣小组(社团)活动计划+教案
- 建设银行股份关联交易申报及信息披露系统操作手册新一代
- 水文信息采集与处理习题
- 2010国际贸易术语解释通则(中文完整版)
- 星级酒店服务技能大赛活动方案
评论
0/150
提交评论