本文实例讲述了smarty模板变量与调节器。分享给大家供大家参考,具体如下:
smarty中assign说明
可能有人在学习smarty的时候已经学习了一些php框架,如tp、laravel、yii等,这里拿tp框架的assign和smarty做一些比较。
$name=thinkphp;$this->assign('name',$name);$this->display();
$smarty=new smarty();$smarty->assign('name','smarty');$smarty->display(index.tpl);
上面两段代码片分别是tp和smarty(千万别混淆tp和smarty,一个是开源的框架,一个是模板设计引擎)。
tp在视图模块调用是 {$name}{$name},等同于php里的, <?php echo($name);?>,smarty中是在index.tpl用{$name}调用。注意模板标签的{和$之间不能有任何的空格,否则标签无效。
数组变量
$smarty = new smarty;$smarty->assign('smarty', array('name'=>'smarty' 'ur' => 'sm')));$smarty->display('in第十英语dex.tpl');
index.tpl
{$smarty.name}<br>{$smarty.ur}<br>
<?php$smarty->assign('data', array( 'smarty', 'sm',));$smarty->display('index.tpl');?>
index.tpl source:
{$contacts[0]}<br />{$contacts[1]}<br />
在tp中的调用有两种方法,如下:
$data[name]='thinkphp';$data[ur]='tp';$this->a``ssign('data',$data);
这里视图调用有两种方法:
name:{$data.name}ur:{$data.ur}
name:{$data['name']}name:{$data['ur']}
同理对象如下所示:
首先是smarty:
name: {$data->name}<br>ur: {$data->ur}<br>
tp:
$data->name='thinkphp';$data->ur='tp';$this->assign('data',$data);$this->display();
也有两种调用方式:
name:{$data->name}ur:{$data->ur}
name:{$data:name}ur:{$data:ur}
smaty和thinkphp是不是有异曲同工之妙呢,所以我们学习框架之前学习smarty是很有帮助的。
变量调节器
为什么先讲调节器呢,因为我觉得这部分其一比较通俗简单,其二后面一些内容也会涉及到调节器的内容。按我的理解smarty的内置调节器就如同php里面内置函数一样起简化编程的作用。
调节器一般用法
变量调节器作用于变量、自定义函数或字符串。变量调节器的用法是:‘|’符号右接调节器名称。变量调节器可接收附加参数影响其行为。参数位于调节器右边,并用‘:’符号分开。
capitalize
变量所有单词首字母大写作用,和php的ucword()
作用相同吊兰的养殖方法和注意事项。
<?php$smarty->assign('articletitle', 'next x-men film, x3, delayed.');?>
//where the template is:{$articletitle}{$articletitle|capitalize}{$articletitle|capitalize:true}
//will output:
next x-men film, x3, delayed.
next x-men film, x3, delayed.
next x-men film, x3, delayed.
cat
将cat里的值后接到给定的变量后面。
<?php$smarty->assign('articletitle', "psychics predict world didn't end");?>
//index.tpl:{$articletitle|cat:" yesterday."}
//output:
psychics predict world didn’t end yesterday.
count_characters
<?php$smarty->assign('articletitle', 'cold wave linked to temperatures.');?>
//where template is:{$articletitle}{$articletitle|count_characters}//默认是fal不计算空格{$articletitle|count_characters:true}//true确定计算空格字符。
//will output:
cold wave linked to temperatures.
29
33
count_paragraphs,count_ntences,count_words
分别是计算变量里的段落数量,计算变量里句子的数量,计算变量里的词数作用,这里不一一举例。
default
为变量设置一个默认值。当变量未设置或为空字符串时,将由给定的默认值替代其输出。default需要一个参数。
<?php$smarty->assign('articletitle', 'dealers will hear car talk at noon.');$smarty->assign('email', '');?>
//where template is:{$articletitle|default:'no title'}{$mytitle|default:'no title'}{$email|default:'no email address available'}
//will output:
dealers will hear car talk at noon.
no title
noemail address available
lower和upper
这里不想讲多少,一个是将字符串小写,一个大写。
replace和regex_replace
使用正则表达式在变量中搜索和替换,语法来自php的preg_repalce函数。一种在变量中进行简单的搜索和替换字符串的处理。等同于php的str_replace()函数。 不懂得去看php手册。虽然smarty支持regex正则调节器,但最好还是直接使用php的正则表达式,要么使用自定义函数或调节器。因为正则法则属于程序代码,其并不认为是内容外在表现的一部份。
date_format和string_format
主要说明一下这两个调节器。
date_format
本调节器将格式化的日期和时间经php函数strftime()
处理。unix时间戳、mysql时间戳及由年月日组成的字符串格式的日期可以传递到smarty经php函数strtotime()解析。设计者可以使用date_format完全控制日期格式,如果传给date_format的日期为空值,但提供了第二个参数,那么将使用第二参数格式化时间。
从smarty-2.6.10开始,传递给date_format的数字值(除了mysql时间戳,见下文)总是当作unix时间戳。
在2.6.10版本之前,符合时间戳格式的数字型字符串(如yyyymmdd)同样可以经由php函数strtotime()处理,因为有时(取决于strtotime()的底层实现)strtotime()接收日期字符串参数,而不是时间戳。
唯一的例外是mysql时间戳:它们本身只有数字,并且是14个字符的长度(yyyymmddhhmmss),mysql时间戳优先于unix时间戳。
<?php$config['date'] = '%i:%m %p';$config['time'] = '%h:%m:%s';$smarty->assign('config', $config);$smarty->assign('yesterday', strtotime('-1 day'));?>
//this template us $smarty.now to get the current time:{$smarty.now|date_format}{$smarty.now|date_format:"%d"}{$smarty.now|date_format:$config.date}{$yesterday|date_format}{$yesterday|date_format:"%a, %b %e, %y"}{$yesterday|date_format:$config.time}
//this above will output:
j中秋节手抄报短句an 1, 2022
01/01/22
02:33 pm
dec 31, 2021
monday, december 1, 2021
14:33:00
date_format转换标记:
%a – 当前区域星期几的简写
%a – 当前区域星期几的全称
%b – 当前区域月份的简写
%b – 当前区域月份的全称
%c – 当前区域首选的日期时间表达
%c – 世纪值(年份除以 100 后取整,范围从 00 到 99)
%d – 月份中的第几天,十进制数字(范围从 01 到 31)
%d – 和 %m/%d/%y 一样
%e – 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ‘ 1’ 到 ‘31’)
%g – 和 %g 一样,但是没有世纪
%g – 4 位数的年份,符合 iso 星期数(参见 %v)。和 %v 的格式和值一样,只除了如果 iso 星期数属于前一年或者后一年,则使用那一年。
%h – 和 %b 一样
%h – 24 小时制的十进制小时数(范围从 00 到 23)
%i – 12 小时制的十进制小时数(范围从 00 到 12)
%j – 年份中的第几天,十进制数(范围从 001 到 366)
%m – 十进制月份(范围从 01 到 12)
%m – 十进制分钟数
%n – 换行符
%p – 根据给定的时间值为 am’ 或pm’,或者当前区域设置中的相应字符串
%r – 用 a.m. 和 p.m. 符号的时间
%r – 24 小时符号的时间
%s – 十进制秒数
%t – 制表符
%t – 当前时间,和 %h:%m:%s 一样
%u – 星期几的白玉蟾十进制数表达 [1,7],1 表示星期一
%u – 本年的第几周,从第一周的第一个星期天作为第一天开始
%v – 本年第几周的 iso 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %g 或者 %g 作为指定时间戳相应周数的年份组成。)
%w – 本年的第几周数,从第一周的第一个星期一作为第一天开始
%w – 星期中的第几天,星期天为 0
%x – 当前区域首选的时间表示法,不包括时间
%x – 当前区域首选的时间表示法,不包括日期
%y – 没有世纪数的十进制年份(范围从 00 到 99)
%y – 包括世纪数的十进制年份
%z 或 %z – 时区名或缩写
%% – 文字上的 `%’ 字符
string_format
一种格式化字符串的方法,例如格式化为十进制数等等。实际运用的是php的sprintf()
函数。
<?php$smarty->assign('number', 23.5787446);?>
//where template is:{$number}{$number|string_format:"%.2f"}{$number|string_format:"%d"}
//will output:
23.5787446
23.58
24
获取配置文件变量
加载配置文件后,配置文件中的变量需要用两个井号”#”包围或者是smarty的保留变量$smarty.config.来调用(下节将讲到),第二种语法在变量作为属性值嵌入至引号的时候非常有用,详细可参考双引号里值的嵌入。
假如配置文件如下:
//config file - foo.conf:pagetitle = "this is mine"bodybgcolor = '#eeeeee'tablebordersize = 3tablebgcolor = "#bbbbbb"rowbgcolor = "#cccccc"
调用方法如下:
{config_load file='foo.conf'}//{config_load}是一个smarty内置函数。用来从配置文件中加载config变量(#variables#)到模版<html><title>{#pagetitle#}</title><body bgcolor="{#bodybgcolor#}"><table border="{#tablebordersize#}" bgcolor="{#tablebgcolor#}"><tr bgcolor="{#rowbgcolor#}"><td>first</td><td>last</td><td>address</td></tr></table></body></html>
保留变量
我们一般访问环境变量的时候就使用保留变量{$smarty}。
请求变量诸如get,get,_post,cookie,cookie,_rver, envandenvand_ssion (参考requestvarsorder和requestvarsorder和request_u_auto_globals) 下面举例说明他们的用法:
//http://www.example.com/index.php?page=fo{$smarty.get.page}//从url获取page的值,等价于$_get['page']{$smarty.post.page}//获取page的变量,等价于$_post['page']{$smarty.cookies.urname}//获取cookie信息,等价于$_cookie['urname']{$smarty.env.path}//获取patg环境变量{$smarty.ssion.id}//获取会话变量,等价于$_ssion['id']{$smarty.request.urname}
尽管smarty提供了直接访问php超级变量的便利五一劳动作文,但仍需谨慎使用。一般来说,get、post和request通常用来直接取值,但更常用的方法是通过访问rver、env、cookie、ssion变量以防止(不安全值)混进模版底层代码。一个好的习惯是给模板变量赋具体的初始值。
1.{$smarty.now}
返回自从unix 纪元(格林威治时间 1970 年1月1日00:00:00)到当前时间的秒数,可以直接通过变量调节器date_format输出显示。应注意的是time()在每次触发时被调用;例如,脚本执行完需要3秒钟,在始末分别调用$smarty.now的话将显示3秒的差异。
{$smarty.now|date_format:'%y-%m-%d %h:%m:%s'}
2.{#smarty.const}
访问php常量
<?php// the constant defined in phpdefine('my_const_val','cherries');?>//output the constant in a template with{$smarty.const.my_const_val}<?php // php定义常量 define('my_const_val','cherries');?>
3.{$smarty.capture}
可以通过{$smarty.capture}
变量捕获内置的{capture}…{/capture}
模版输出。
4.{$smarty.config}
获取配置变量
5.{$smarty.ction}
{$smarty.ction}
用来指向{ction}
循环的属性,里面包含一些有用的值,比如.first/.index等。
6.{$smarty.template}
返回经过处理的当前模板名(不包括目录)。
7.{$smarty.current_dir}
返回经过处理的当前模板目录名。
8{$smarty.version}、$smarty.block.child}、{$smarty.block.parent}{$smarty.ldelim}、{$smarty.rdelim}
用的少,不作说明,可以查看手册了解更多内容。
本文发布于:2023-04-07 14:46:26,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/830ca62826c53789d30ce06ec945bdda.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Smarty模板变量与调节器实例详解.doc
本文 PDF 下载地址:Smarty模板变量与调节器实例详解.pdf
留言与评论(共有 0 条评论) |