smarty

http://mp.weixin.qq.com

http://bce.baidu.com/product/bae.html

sae.sina.com.cn/




相关属性
1)左右分隔符
left_delimiter :左分隔符,默认为“{”
right_delimiter:右分隔符,默认为“}”

template_dir :模板目录,默认为“templates”
complile_dir :编译目录,默认为”templates_c”
config_dir :配置目录,默认为”configs“
cache_dir :缓存目录,默认为”cache“

****************************************************************

相关方法
在上例中,我们可以直接访问私有属性,但是强烈不建议大家直接访问私有属性,如果操作中想更改元素的默认行为,可以使用如下四个方法:
setTemplateDir() :设置模板目录,默认”templates”
setCompileDir() :设置编译目录,默认“templates_c
setConfigDir() :设置配置文件目录,默认”configs”
setCacheDir() :设置缓存目录,默认”cache”


常用的两个方法
1)assign()方法
调用该方法主要主要是为Smarty模板文件中的变量赋值,可以传递一对名称/数值对,也可以包含名称/数值对的关联数组

2)display()方法
基于smarty的脚本必须使用这个方法,而且一个脚本中只能使用一次,因为它负责获取和显示由Smarty引擎引用的模板。

******************************************************************

系统变量
在Smarty中有很多已经定义好的(内置的)变量,我们就称之为”系统变量“,常用系统变量如下:
$smarty.get.page :相当于PHP代码中$_GET[‘page’];
$smarty.post.page :相当于$_POST[‘page’];
$smarty.cookies.username :相当于$_COOKIE[‘username’];
$smarty.server.SERVER_NAME :相当于$_SERVER[‘SERVER_NAME’]
$smarty.env.Path :相当于$_ENV[‘Path’]
$smarty.session.id :相当于$_SESSION[‘id’]
$smarty.request.username :相当于$_REQUEST[‘username’];
{$smarty.now} :获取当前时间的时间戳
{$smarty.const} :获取系统常量
{$smarty.capture} :获取capture标签捕获到的内容
{$smarty.config} :获取配置文件中的变量信息
{$smarty.section} :获取section循环的相关信息
{$smarty.template} :获取当前正在操作的模板文件名称
{$smarty.current_dir} :获取当前目录
{$smarty.version} :获取Smarty的版本号
{$smarty.ldelim} :获取左分隔符
{$smarty.rdelim} :获取右分隔符

******************************************************************

变量调节器
变量调节器:就是实现对Smarty中的变量(系统变量与自定义变量)进行格式化操作,基本语法:
{$变量名称|调节器:参数1:参数2:……}

常用的21种变量调节器:
{$var|capitalize} :首字母大写
{$var|count_characters:true} :计算机字符数,如果参数为true代表计算空格
{$var|cat:var2} :连接字符串
{$var|count_paragraphs} :计算段落数
{$var|count_sentences} :计算句子数
{$var|count_words} :计算单词数
{$var|date_format:”%Y%m%d”} :对时间进行格式化操作
{$var|default:”value”} :默认值,如果当前变量没有设置,系统会自动输出默认值
{$var|escape} :转码操作
{$var|indent:10:”*”} :文本缩进
{$var|lower} :转化为小写
{$var|nl2br} :把\n换行符转化为br标签
{$var|regex_replace:”/[\t\n]/”:””} :正则替换
{$var|replace:”aa”:”bb”} :普通字符串替换
{$var|spacify:”^^”} :插空(在元素与元素插入内容)
{$var|string_format:”%d”} :字符串格式化,%d格式为整型,%s格式化为字符串类型
{$var|strip: “*”} :去除多余的空格
{$var|strip_tags} :去除HTML标签
{$var|truncate:30:”…”} :截取字符串(只能截取英文)
{$var|upper} :转大写
{$var|wordwrap:30:”<br>”} :行宽约束,每行只能显示多少个字符

******************************************************************

insert内建函数
主要作用:如果发现系统中Smarty不存在某些我们需要的方法或功能,可以通过insert内建函数对其扩充,基本语法:
{ insert  name=“func” assign=“var”[var ...] }
参数说明:
name:要扩充函数的名称
assign:变量赋值列表(传递时是以关联数组形式传递的)
特别注意:如果使用insert进行扩充函数时,函数名称定义格式如下:
function  insert_函数名称() {
    //函数体
}

foreach,foreachelse内建函数
主要作用:实现对数组元素遍历操作(一维、二维、多维),基本语法:
{foreach  from=要遍历的数组  item=遍历得到的数组元素  key=键值  name=循环名称}
    //遍历内容
    {foreachesle}
{/foreach}
参数说明
from:必选参数,要遍历的数组元素
item:必须参数,每次遍历时,系统遍历的元素放入item选项中
key:循环的键值
name:foreach循环的名称
foreachelse:当要遍历的数组为空时,系统会自动执行此语句

例5:附加参数的使用(name属性)

foreach还具有很多附加属性,如下所示:
$smarty.foreach.name.index      @index  :循环索引,默认从0开始
$smarty.foreach.name.iteration    @iteration :循环迭代(当前是第几次循环),从1开始
$smarty.foreach.name.first           @first :当第一次循环时条件为真
$smarty.foreach.name.last           @last :当最后一次循环时条件为真
$smarty.foreach.name.total             @total :循环的总次数

******************************************************************

if…elseif…else内建函数
主要功能:实现分支结构(选择结构),基本语法:
{if}
{elseif}
{else}
{/if}

******************************************************************

内建函数
ldelim与rdelim内建函数
主要功能:输出Smarty中的左右分隔符
ldelim :left_delimiter缩写
rdelim :right_delimiter缩写

literal内建函数
主要功能:literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的css或 javascript 脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示,基本语法:
{literal}
    …
{/literal}

strip内建函数
主要功能:去除任何位于 {strip}{/strip} 标记中数据的首尾空格和回车. 这样可以保证模板容易理解且不用担心多余的空格导致问题。
基本语法:
{strip}
    要格式化的代码
{/strip}

section内建函数
主要功能:完成对数组下标从0开始且连续的索引型数组的遍历(数组的遍历)
基本语法:
{section   name=名称   loop=循环数组(次数)   start=开始(0)   step=步阶(1)   max=最大循环次数}
{sectionelse}
{/section}
参数说明:
name:每次循环时,系统会将当前循环的索引下标放入name变量
loop:通过此参数确定数组元素的数量,以此确定遍历的次数
start:默认从哪个索引的元素开始,默认为0
step:步阶,每次前进多少个长度的索引,默认为1
max:最大的循环次数
sectionelse:当遍历的数组元素为空时,系统自动执行sectionelse

******************************************************************

section附加参数的使用
{$smarty.section.name.index} :循环索引,默认从0开始
{$smarty.section.name.index_prev} :上一次循环索引,默认从-1开始
{$smarty.section.name.index_next} :下一次循环索引,默认从1开始
{$smarty.section.name.iteration } :循环迭代(当前是第几次循环)
{$smarty.section.name.first} :当第一次循环时条件为真
{$smarty.section.name.last} :当最后一次循环时条件为真
{$smarty.section.name.total} :循环的总次数

******************************************************************

counter计数器
主要功能:实现自动计数功能,基本语法:
{counter start=0 skip=2 print=false}

参数说明:
start:默认从多少开始计数
skip:步阶,每次前进多少个数
print:是否直接打印输出,如果为true代表输出,false代表不输出。

******************************************************************

cycle轮显函数
主要功能:实现对某些数值的轮换显示
第一次循环时,读取第一个参数
第二次循环时,读取第二个参数

第n此循环时,读取第n个参数
循环结束后,从第一个元素从新开始轮显
<tr bgcolor=“{cycle values="#eeeeee,#d0d0d0"}”>

debug调试函数
主要功能:用于调试模板中的变量,基本语法:
{debug}

******************************************************************

fetch自定义函数
主要功能:在模板页面中直接载入外部文件到字符串(功能与file_get_contents类似)
基本语法:
{fetch  file=’要载入文件的名称’   assign=’var’}
file:要载入文件的名称
assign:把捕获到的内容存入变量var中

html_image自定义函数
主要功能:载入一张图片,基本语法:
{html_image  file=’图片名称’}

html_checkboxes自定义函数
主要功能:把一个数组转化生成复选框,基本语法:
{html_checkboxes name=‘cust’values=$cust_ids  checked=$customer_id  output=$cust_names  separator="<br />"}
参数说明:
name:每个复选框的name名称,接收时需要此参数
output:复选框后面的文本信息,要求是一个数组
values:每一个复选框的value值,要求也是一个数组
checked:当前复选框是否选中,要求也是一个数组
separator:元素与元素之间的分隔符

******************************************************************

html_options下拉选框
主要功能:生成select下拉选框中的option元素,基本语法:
<select name=customer_id>     
{html_options  values=$cust_ids  selected=$customer_id  output=$cust_names}
</select>
参数说明:
values:每个下拉元素的value值,要求是一个数组
output:每个option选项后面的文本信息,要求是一个数组
selected:默认下拉选中的元素,要求也是一个数组(多选)

******************************************************************

html_radios单选按钮
主要功能:生成表单元素单选按钮,基本语法:
{html_radios name values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
参数说明:
name:每个单选框的名称
values:每个单选框的值
checked:被选中的元素,要求是一个固定值
output:单选框后面的文本信息,要求是一个数组
separator:元素与元素之间的分隔符

******************************************************************

变量
$template_dir :模板目录,默认为’templates’
$compile_dir :编译目录,默认为’templates_c’
$config_dir :配置目录,默认为‘configs’
$cache_dir :缓存目录,默认为’cache’
$left_delimiter :左分隔符
$right_delimiter :右分隔符
$caching :缓存开关,布尔类型的值,true开启缓存,false关闭缓存
$cache_lifetime :缓存的生命周期,默认3600秒,1小时
$debugging :功能与{debug}类似,调试功能
$php_handling :设置在模板中是否可以使用php源代码(了解)

******************************************************************

相关方法
assign :分配变量到模板文件(按值传递)
assignByRef :分配变量到模板文件(按引用传值)
append :以数组形式分配变量到模板文件(按值传递)
appendByRef :以数组形式分配变量到模板文件(按引用传递)
clearAllAssign :清除所有赋值变量
clearAssign :清除某个指定的赋值变量
clearCache :清除缓存
configLoad :载入配置文件
clearConfig :清除指定的配置变量
display :载入模板内容并替换变量,然后输出模板内容
fetch :载入模板内容并替换变量,但不输出
templateExists :判断模板文件是否存在

******************************************************************

开启Smarty缓存技术
Smarty中默认提供了一种服务器端缓存技术,但是默认情况下,其实关闭的,所以相对其进行使用必须首先开启缓存。
$smarty->caching=true :缓存开关(必须)
$smarty->cach_lifetime=3600 :设置缓存的生命周期(可选,因为Smarty源码中有默认值)

减轻数据库服务器的压力
要用到的知识点:缓存检测(检测当前模板文件是否具有缓存)
$smarty->isCached(“tpl.tpl”)

清除缓存
在实际项目开发中,如果开启了缓存功能,系统将无法实时获取到最新数据,所以一般情况下,在我们更改系统(对数据的增删改查)后,建议清除缓存,清除方法如下:
$smarty->clearCache(“tpl.tpl”) :清除指定页面的缓存(清除某个模板)
$smarty->clearAllCache() :清除所有缓存(cms系统清除缓存按钮)

局部缓存技术
在实际项目开发中有些板块、如浏览次数,留言列表等相关板块是不需要进行页面缓存的,所以在实际开发中,可以通过以下三种方式来解决此问题:
在PHP入口中设置方式:
$smarty->assign(“var”, “value”, true) :如果assign中的第三个参数为true,代表当前变量不需要进行缓存
在Smarty模板中设置方式:
{$var nocache=true} :设置当前变量不缓存
{nocache}{/nocache} :设置某个区域不缓存


单页面多缓存
在实际项目开发中,如产品展示页面经常是公用同一个模板,只有传递的参数不同,但是由于受到缓存的影响,系统只能显示第一次访问的结果,如果解决这种单页面多缓存的问题呢?
答:可以通过单页面多缓存的形式解决此问题
$smarty->caching=true 开启缓存
$smarty->display(“tpl”, “cacheid”) :给display函数设置第二个参数,保证每次请求的参数都是不同,建议使用产品id等情况。


缓存集合
在实际开发中,有些网页或页面(如列表页或栏目页)可能同时不要传递多个参数,如以下链接:
http://www.shop.com/cateid=10&page=5
http://www.shop.com/cateid=11&page=20
可以通过以下方式来解决缓存集合问题:
$smarty->caching=true
$smarty->display(“tpl”, $cateid.”|”.$page)

******************************************************************

过滤器的种类
在Smarty中,过滤器一共有3中形式,分别:
Prefilters :预过滤器
Postfilters :后过滤器
Output Filters :输出过滤器


使用输出过滤器过滤敏感数据
要使用到的知识点:
$smarty->registerFilter($type, $callback)
$type:定义过滤器的类型
pre  预过滤器
post 后过滤器
output 输出过滤器
$callback:自定义函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值