Smarty模板变量与调节器实例详解
本文实例讲述了Smarty模板变量与调节器。分享给大家供大家参考,具体如下:
Smarty中assign说明
可能有人在学习smarty的时候已经学习了一些php框架,如tp、laravel、Yii等,这里拿tp框架的assign和smarty做一些比较。
$name=thinkphp; $this->assign('name',$name); $this->display();
$smarty=newSmarty(); $smarty->assign('name','smarty'); $smarty->display(index.tpl);
上面两段代码片分别是tp和smarty(千万别混淆tp和smarty,一个是开源的框架,一个是模板设计引擎)。
tp在视图模块调用是{$name}{$name},等同于php里的,,smarty中是在index.tpl用{$name}调用。注意模板标签的{和$之间不能有任何的空格,否则标签无效。
数组变量
$smarty=newSmarty; $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.tplsource:
{$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','nextx-menfilm,x3,delayed.');?>
//Wherethetemplateis: {$articleTitle} {$articleTitle|capitalize} {$articleTitle|capitalize:true}
//Willoutput:
nextx-menfilm,x3,delayed.
NextX-MenFilm,x3,Delayed.
NextX-MenFilm,X3,Delayed.
cat
将cat里的值后接到给定的变量后面。
assign('articleTitle',"Psychicspredictworlddidn'tend");?>
//index.tpl: {$articleTitle|cat:"yesterday."}
//OUTPUT:
Psychicspredictworlddidn'tendyesterday.
count_characters
assign('articleTitle','ColdWaveLinkedtoTemperatures.'); ?>
//Wheretemplateis: {$articleTitle} {$articleTitle|count_characters}//默认是false不计算空格 {$articleTitle|count_characters:true}//true确定计算空格字符。
//Willoutput:
ColdWaveLinkedtoTemperatures.
29
33
count_paragraphs,count_sentences,count_words
分别是计算变量里的段落数量,计算变量里句子的数量,计算变量里的词数作用,这里不一一举例。
default
为变量设置一个默认值。当变量未设置或为空字符串时,将由给定的默认值替代其输出。Default需要一个参数。
assign('articleTitle','DealersWillHearCarTalkatNoon.'); $smarty->assign('email','');?>
//Wheretemplateis: {$articleTitle|default:'notitle'} {$myTitle|default:'notitle'} {$email|default:'Noemailaddressavailable'}
//Willoutput:
DealersWillHearCarTalkatNoon.
notitle
Noemailaddressavailable
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('-1day')); ?>
//Thistemplateuses$smarty.nowtogetthecurrenttime: {$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}
//Thisabovewilloutput:
Jan1,2022
01/01/22
02:33pm
Dec31,2021
Monday,December1,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-本年第几周的ISO8601: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); ?>
//Wheretemplateis: {$number} {$number|string_format:"%.2f"} {$number|string_format:"%d"}
//Willoutput:
23.5787446
23.58
24
获取配置文件变量
加载配置文件后,配置文件中的变量需要用两个井号”#”包围或者是smarty的保留变量$smarty.config.来调用(下节将讲到),第二种语法在变量作为属性值嵌入至引号的时候非常有用,详细可参考双引号里值的嵌入。
假如配置文件如下:
//configfile-foo.conf: pageTitle="Thisismine" bodyBgColor='#eeeeee' tableBorderSize=3 tableBgColor="#bbbbbb" rowBgColor="#cccccc"
调用方法如下:
{config_loadfile='foo.conf'}//{config_load}是一个smarty内置函数。用来从配置文件中加载config变量(#variables#)到模版{#pageTitle#} First Last Address