本文中的边界标签分别为"<{"和"}>"
start-12, 都是静态模板中的内容, 即使函数也只是模板中的标签或者变量调解器;
13-end, 都是smarty对象的方法和属性
表达式中不能乱使用空格
1.注释
<{* 我是注释内容 *}> //相当于PHP的注释, 而不是HTML文件的注释, 所以不会出现在页面源码中
2.函数
每一个smarty标签输出一个变量或者调用某种函数(像include, foreach, section等均可认为为函数)
<{ funcname varname1="aaa" varname2="bbb" }>
<{ assign var="name" value="$firstname $lastname" }>
3.函数参数
大部分函数都有自己的属性(参数), 以便说明和修改函数进行操作
静态数值、布尔值(true, false, yes, no)以及变量做为参数值不需要加引号, 字符串必须加引号
<{ include file="abc.html" }>
<{ include file=$filename }>
<{ funcname display_days=yes }>
4.函数参数为字符串时引号内变量的嵌入
正常情况下(不会引起冲突)可以直接嵌入
<{ func var="Hello $name !" }>
<{ func var="Hello $names[0] !" }>
而<{ func var="Hello $names.first_name" }> //则只会解释$names而不会解释$names['first_name'], 因为"."可以认为是边界符(同空格等)
冲突情况下用"`"(与~同键)
<{ func var="Hello `$names.first_name`" }> //会解释$names['first_name']
<{ func values="one, two, `$smarty.config.val`" }>
<{ func }>
5.数学运算
<{ $num+1 }> //$num和加号"+"及1之间不能使用空格
<{ $num1*$num2 }>
<{ if $num%2 }>
6.索引数组, 关联数组, 对象的使用
<{ $names.firstname }> //关联数组
<{ $names[0] }> //索引数组
<{ $person->name }> //对象
7.导入配置文件的变量
配置文件my.conf
color = "#EEEEEE";
导入<{ config_load file="my.conf" }>
使用<{ #color# }>或者<{ $smarty.config.color }>
8.保留变量
$smarty.[get|post|request|cookies|session|server|env].id 请求时的变量
$smarty.now 当前时间戳 <{ $smarty.now | date_format: "%Y-%m-%d"}>
$smarty.const 自定义常量
$smarty.config 在使用config_load后导入的配置文件内容可以用此变量使用
$smarty.section、$smarty.foreach 在使用smarty循环时用到的变量
$smarty.template 当前使用的模板名称
9.变量调解器
类似于Linux中的管道符, 后接命令(或函数)处理, 但与Linux不同的是变量调解器参数的使用方法为用冒号间隔参数
注意: 如果你给数组变量应用单值变量的调节,结果是数组的每个值都被调节。如果你只想要调节器用一个值调节整个数组,你必须在调节器名字前加上@符号。例如: {$articleTitle|@count}(这将会在 $articleTitle 数组里输出元素的数目)
capitalize: 首字母大写 <{ $title|capitalize }>
count_characters: 计算字符数 参数true|false用来确定是否计算空格数 <{ $title|count_characters:true }>
count_paragraphs: 计算段数 <{ $content|count_paragraphs }>
count_sentences: 计算句数 <{ $content|count_sentences }>
count_words: 计算单词数 <{ $content|count_words }>
cat: 连接字符串 <{ $title|cat " Dota" }>
date_format: 把时间戳格式化为日期形式 <{ $smarty.now|date_format:"%Y-%m-%d"}> 此参数与PHP或Python的strftime函数相同, 与date不同
default: 为变量设置一个默认值, 当变量为空或者未设置的时候将赋值为默认值 <{ $title|default: "No title" }>
escape: html转码, url转码; 参数为要转码类型, 包括html, htmlall, url, quotes, hex, hexentity等, 默认为html <{ $url|escape:"url" }>
indent: 缩进 两个非必需参数, 第一个为缩进多少个字符, 第二个字符表示用什么字符进行缩进 <{ $content|indent:1:" " }>
lower: 小写 <{ $title|lower }>
upper: 大写 <{ $title|upper }>
nl2br: 同PHP的nl2br函数, 把换行符转为<br /> <{ $content|nl2br }>
regex_replace: 正则替换 两个必需参数, 一个为正则, 一个为要替换为的字符串 <{ $title|regex_replace:"/[\r\t\n]/":" " }>
replace: 相当于PHP的str_replace <{ $title|replace:"John":"Nali" }>
spacify: 插空, 是一种在字符的每个字符之间插入空格或者其他的字符(串), 默认参数为空格 <{ $title|spacify:"-"}>
string_format: 相当于sprintf <{ $title|string_format:"%.2f" }>
strip: 用一个空格或给定字符替换所有重复空格, 换行符以及制表符等, 默认为用空格替换 <{ $title|strip:" " }>
strip_tags: 去除html标签, 无参 <{ $title|strip_tags }>
truncate($length = 80, $suffix = "...", $limit = false): 截取字符串 <{ $title|truncate:30:"--":true }>
wordwrap($width = 80, $used_wraper = "\n", $limit = false): 长字段自动换行 <{ $title|wordwrap:20:"<br />\n" }>
10.组合修改器
把修改器组合起来使用 <{ $title|upper|truncate:20 }>
11.内建函数
是smarty自带的内建函数, 是模板语言的一部分, 自定义函数与内建函数不可重名, 也不可以修改内建函数
captrue: 捕获模板输出的数据, 并将其存储到一个变量里面, 而不是输出到页面, 任何在 <{ captrue name="mycap" }>和<{ /capture }>之间的数据将被存储到$mycap中, 变量名由name指定, 如果没有指定name则使用$default, 不能嵌套!在模板中使用$smarty.capture.mycap访问该变量
config_load: 用于从配置文件中加载变量 <{ config_load file="config.php" }>
foreach: 参数from-待循环数组 key-当前处理元素索引或者键名 item-当前处理元素 name-该循环的名称(用来访问该循环);其中from和item为必须 <{ foreach from=$names key=k item=name }>name:<{$name}><br /><{/foreach}>
include: 参数file-路径相对于template_dir要包含的文件名, assign-模板的输出内容 这样就不会直接显示了 var-自定义传入变量以供要包含模板内部使用, 若与内部变量冲突则此变量有效 <{ include file="public.html" js="index.js" }>
include_php: 同include使用方法, 但拥有参数once, 而无自定义参数列表 <{ include_php file="/htdocs/php/index.php" }>
insert: 同include, 但是不论是否已经开启缓存, insert的内容都不会被缓存 参数:name-指定函数名称 之后会与"insert_"结合为insert_函数名, 也可传入自定义参数, assign-同include; script-插入函数前需要先包含的php脚本名称 <{ insert name="getAd" aid="1234" script="a.php" }>
if elseif else: 修饰词 eq, ne, neq, gt, lt, lte, le, gte, ge, is even, is odd, is not even, is not odd, not, mod, div by, even by, odd by, ==, !=, <, >, <=, >=, &&, ||, !; 这些修饰词必须和变量或者常量用空格隔开 <{ if $name == "John" }>
ldelim|rdelim: 代表定界符常量 {ldelim}在此文代表"<{", {rdelim}在此文代表"}>"
literal: 不会解析其内文本 <{ literal }><script>function abc{alert("bcd");}</script><{ /literal }>
php: 不赞成使用
section, sectionelse: 参数name-键名, loop-要循环的数组, start-循环其实索引位置, step-循环步长(如果步长为负数, 则从后向前遍历), max-循环最大执行次数, show-是否显示该循环 必须指定name和loop <{ section name=k loop=$names }>{$names[k]}<br /><{ /section }> sectionelse表示数组为空时执行的操作
strip: 去除字符串内任何首尾空格和回车, 会把html标签外无空格连起来<{ strip }><table border=0> <tr> <td> </td> </tr> </table> <{ /strip }>
12.自定义函数
assign: 赋值 <{ assign var="name" value="John" }>
counter: 开始一个计数器 name-计数器名称 start-开始的数值 skip-步长 direction-方向(增减) print-本次调用本函数是否输出 assign-将值赋值给变量 <{ counter start=0 skip=1 print=true assign="c" }>
cycle: 轮转(交替)使用一组值 name-名称 values-轮转的值, 默认以","分开 print-是否输出 delimiter-轮转的值的分隔符 assign-把值赋值给指定变量 <tr color="<{ cycle value="#000 , #FFF" }>"></tr>
fetch: file-包含的文件名 assign-赋值给指定变量 <{ fetch file="a.html" assign="abc" }>
其他的用来输出HTML的标签函数不如直接使用静态HTML
13.变量
$template_dir-模板文件存放目录 $compile_dir-编译文件存放目录 $config_dir-配置文件存放目录 $cache_dir-缓存文件存放目录 #这些目录若为相对目录则是针对当前执行的php文件的相对目录
$pugins_dir-插件文件存放目录(是一个数组) 默认是在smarty目录下的plugins目录, 如果指定了一个相对路径, smarty会首先在smarty目录下寻找, 然后到当前工作目录下寻找, 继而到php的include_path中寻找
$caching-是否开启缓存 $cache_lifetime-缓存文件生存时间(-1永不过期, 0总是重新生成)
$force_compile-强迫重新进行编译, 重新生成缓存
$default_tempate_handler_func-当找不到模板文件时自动调用的方法
14.smarty对象的方法
append($name, $value): 对象的$_tpl_vars数组中如果有$name键则向$_tpl_vars[$name]数组中添加一个值$value, 若$value为数组则合并
append_by_ref($name, $value): 与append不同的是添加的变量的引用, 避免了内存的拷贝
assign($name, $value): 使$_tpl_vars[$name]=$value
assign_by_ref($name, $value): 同append_by_ref原理
clear_all_assign(): 清除所有赋值, 即把$_tpl_vars设为空数组
clear_assign([$string|$arr]): 清除指定赋值
clear_all_cache(): 清除所有缓存文件
clear_cache($tpl[, $cache_id][, $compile_id][, $expire_time]): 删除指定缓存文件
clear_compile_tpl([$tpl]): 删除指定或者所有模板的编译文件
clear_config([$con]): 删除指定或者所有配置变量
config_load($file[, $paragraph]): 导入一个配置文件或者一个配置文件的其中一段
display($file[, $cache_id][, $compile_id]): 包含并解析$template_dir目录下的$file模板 其内部执行其实调用的是fetch方法 也可以使用绝对路径"file:C:/www/a.html"作为$file的值
fetch($file[, $cache_id][, $compile_id][, $display = false]): 包含进并解析一个模板内容并赋值给变量, 默认不输出
get_config_vars([$var]): 获取指定或者所有配置变量值, 此方法用在config_load()之后
get_template_vars([$var]): 获取指定或者所有已赋值的模板变量的值, 实际是返回$_tpl_vars数组
is_cached($file[, $cache_id]): 判断指定缓存是否存在
register_block(自定义块标签, 对应函数): 自定义标签是成对出现的, 对应函数有三个参数$params-对应标签中的参数, $content-对应加载快标签开始和结束之间的内容, &$smarty-不用管 然后在函数中return处理后的数据; 也可以在plungins下自定义block.快标签名称.php, 里面方法名为smarty_block_快标签名称($params, $content, &$smarty)
register_function(自定义函数名, 对应函数): 自定义函数名是单出现的, 对应函数有两个参数$params, &$smarty, 可以用extract($params)进行拆分, 也可以通过关联键名来使用, 最后return处理后的数据
register_modifier(自定义调解器名, 对应函数): 自定义调解器名是放在管道符之后的, 对应函数有无限个$str-要处理的数据, $var1...参数等, 最后做return处理
register_object(自定义对象名, 对应对象): 可以用assign一个对象实现, 但本函数可以实现<{myobj->func var1="name" var2="sex"}>此类用户自定义函数, 而用assign也可以<{$myobj->func($var1, $var2)}>实现
register_[pre|post|out]filter(自定义过滤器函数): 自定义过滤器函数有两个参数 $str-需要过滤的字符串(模板内容), &$smarty; 此函数对模板进行预处理过滤, 提交过滤, 输出过滤
register_resource(): 注册资源, 暂缺
15.缓存
设置生存时间$cache_lifetime 值-1表示永久缓存 0表示不缓存 2表示缓存两秒
为指定模板指定生存时间 设置$caching=2; 而后设置$cache_lifetime为想要的时间;
$force_compile 强制重新编译生成缓存
is_cached()用来测试一个模板是否有有效的缓存
内建函数insert的不能被缓存
加入$cache_id生成多个模板缓存(可以用来缓存指定id的news或者用户信息等)