Smarty模板变量与调节器实例详解 本文实例讲述了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里的, ,smarty中是在index.tpl用{$name}调用。注意模板标签的{和$之间不能有任何的空格,否则标签无效。 数组变量 $smarty = new Smarty; $smarty->assign('smarty', array('name'=>'smarty' 'user' => 'sm'))); $smarty->display('index.tpl'); index.tpl {$smarty.name}
{$smarty.user}
assign('data', array( 'smarty', 'sm', )); $smarty->display('index.tpl'); ?> index.tpl source: {$Contacts[0]}
{$Contacts[1]}
在tp中的调用有两种方法,如下: $data[name]='thinkphp'; $data[user]='tp'; $this->a``ssign('data',$data); 这里视图调用有两种方法: Name:{$data.name} user:{$data.user} name:{$data['name']} name:{$data['user']} 同理对象如下所示: 首先是smarty: name: {$data->name}
user: {$data->user}
tp: $data->name='thinkphp'; $data->user='tp'; $this->assign('data',$data); $this->display(); 也有两种调用方式: name:{$data->name} user:{$data->user} name:{$data:name} user:{$data:user} smaty和thinkphp是不是有异曲同工之妙呢,所以我们学习框架之前学习smarty是很有帮助的。 变量调节器 为什么先讲调节器呢,因为我觉得这部分其一比较通俗简单,其二后面一些内容也会涉及到调节器的内容。按我的理解smarty的内置调节器就如同php里面内置函数一样起简化编程的作用。 调节器一般用法 变量调节器作用于变量、自定义函数或字符串。变量调节器的用法是:‘|'符号右接调节器名称。变量调节器可接收附加参数影响其行为。参数位于调节器右边,并用‘:'符号分开。 capitalize 变量所有单词首字母大写作用,和php的ucword()作用相同。 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里的值后接到给定的变量后面。 assign('articleTitle', "Psychics predict world didn't end");?> //index.tpl: {$articleTitle|cat:" yesterday."} //OUTPUT: Psychics predict world didn't end yesterday. count_characters assign('articleTitle', 'Cold Wave Linked to Temperatures.'); ?> //Where template is: {$articleTitle} {$articleTitle|count_characters}//默认是false不计算空格 {$articleTitle|count_characters:true}//true确定计算空格字符。 //Will output: Cold Wave Linked to Temperatures. 29 33 count_paragraphs,count_sentences,count_words 分别是计算变量里的段落数量,计算变量里句子的数量,计算变量里的词数作用,这里不一一举例。 default 为变量设置一个默认值。当变量未设置或为空字符串时,将由给定的默认值替代其输出。Default需要一个参数。 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时间戳。 assign('config', $config); $smarty->assign('yesterday', strtotime('-1 day')); ?> //This template uses $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: Jan 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()函数。 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 = 3 tableBgColor = "#bbbbbb" rowBgColor = "#cccccc" 调用方法如下: {config_load file='foo.conf'}//{config_load}是一个smarty内置函数。用来从配置文件中加载config变量(#variables#)到模版 {#pageTitle#}
First Last Address
保留变量 我们一般访问环境变量的时候就使用保留变量{$smarty}。 请求变量诸如GET,GET,_POST,COOKIE,COOKIE,_SERVER, ENVandENVand_SESSION (参考requestvarsorder和requestvarsorder和request_use_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.username}//获取cookie信息,等价于$_COOKIE['username'] {$smarty.env.PATH}//获取PATG环境变量 {$smarty.session.id}//获取会话变量,等价于$_SESSION['id'] {$smarty.request.username} 尽管Smarty提供了直接访问php超级变量的便利,但仍需谨慎使用。一般来说,GET、POST和REQUEST通常用来直接取值,但更常用的方法是通过访问SERVER、ENV、COOKIE、SESSION变量以防止(不安全值)混进模版底层代码。一个好的习惯是给模板变量赋具体的初始值。 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常量 //Output the constant in a template with{$smarty.const.MY_CONST_VAL} 3.{$smarty.capture} 可以通过{$smarty.capture}变量捕获内置的{capture}…{/capture}模版输出。 4.{$smarty.config} 获取配置变量 5.{$smarty.section} {$smarty.section}用来指向{section}循环的属性,里面包含一些有用的值,比如.first/.index等。 6.{$smarty.template} 返回经过处理的当前模板名(不包括目录)。 7.{$smarty.current_dir} 返回经过处理的当前模板目录名。 8{$smarty.version}、$smarty.block.child}、{$smarty.block.parent}{$smarty.ldelim}、{$smarty.rdelim} 用的少,不作说明,可以查看手册了解更多内容。 更多关于Smarty相关内容感兴趣的读者可查看本站专题:《smarty模板入门基础教程》、《PHP模板技术总结》、《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》 希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。