smarty函数
实现对smarty的功能扩展
Smarty.class.php文件中成员方法
内建函数:smarty自带 ,不能修改
自定义函数:可以自行修改
保存在plugins目录下
语法格式类似于html标记的写法
<{……}>
一、 了解smarty自定义函数
例如:
1) smarty自定义函数assign
作用:用于在模板被执行时为模板变量赋值.
函数名称:assign
参数:var: 声明变量名称 字符串
Value: 给该变量赋值 字符串
例如:a.html:
<{assign var=”title” value=”this is title”}>
<{$title}>
显示结果:this is title
练习:
使用自定义函数分配变量 content,对应值为abc;
<{assign var=”content” value=”abc”}>
<{$content}>
显示结果:abc
类似于:
属性无顺序要求
2) smarty方法assign
二、 实现自定义函数
1)例如:
a.html:
<{title num=”10” content=”aaaa” size=”10” color=”red” }>
b.php
第一步:自定义函数
function fun1(){}
第二步:注册自定义函数
$tpl->register_function(“模板文件中的函数名”,”php中的函数名”)
例如:
a. html:
<{title num=”10” size=”7” content=”11111”}>
b. php:
$tpl->register_function(“title”,”fun1”);
function fun1($args){
$a=””;
for($i=0;$i<$args[“num”];$i++){
$a.=“”.$args[content].”
”;
}
return $a;
}
2)注册块
$tpl->register_block(“模板文件中的块名”,”php中的函数名”)
a.html
<{h num=10 size=”7”}>
aaaaa
<{/h}>
例如:
a.html:
<{hello num=”10” size=”10”}>
aaaaa
<{/hello}>
b.php:
$tpl->register_block(“hello”,”fun2”);
function fun2($args,$content){
$a=””;
for($i=1;$i<$args[“num”];$i++){
$a.=””.$content.”
”;
}
return $a;
}
2) 在plugins目录下新建文件
新建函数文件 world
例如:
function.assign_debug_info.php
function smarty_function_***(){}
步骤
第一步:plugins下新建文件function.world.php
第二步:打开文件
Function smarty_function_world($args,&$smarty){..}
例如:
a. html:
<{world num=”10” size=”7” content=”aaa”}>
function.world.php:
function smarty_function_world($args, &$smarty){
$a="";
for($i=0;$i<$args["num"];$i++){
$a.= "".$args["content"]."
";
}
return $a;
}
?>
新建块文件hello
block.hello.php
function smarty_block_hello(){}
第一步:plugins下新建块文件block.hello.php
第二步:打开文件
Function smarty_block_hello($args,$content,&$smarty){..}
例如:
a.html:
<{hello num=”10” size=”6”}>
aaaa
<{/hello}>
block.hello.php:
function smarty_function_world($args,$content){
$a="";
for($i=0;$i<$args["num"];$i++){
$a.= "".$content."
";
}
return $a;
}
?>
自定义函数的功能和语法
① assign: 用于在模板被执行时为模板变量赋值.
<{assign var=” string被赋值的变量名” value=” string赋给变量的值”}>
<{assign var=” name” value=”ABC”}>
The value is <{$name}>
结果:The value is ABC
② counter: 用于输出一个记数过程.
<{counter name=” 计数器的名称” start=”记数器初始值” skip=”记数器间隔、步长” direction=”记数器方向,(增/减)” print=”是否输出值” assign=”输出值将被赋给模板变量的名称”}>
<{counter start=0 skip=2 print=true}>
<{counter}>
<{counter}>
<{counter}>
<{counter}>
结果:0 2 4 6 8
如果print=false结果:2 4 6 8
③Cycle:用于轮转使用一组值
<{cycle name=轮转的名称 values=待轮转的值,可以是用逗号分隔的列表(请查看 delimiter 属性)或一个包含多值的数组. print=是否输出值 advance=是否使用下一个值(为 false 时使用当前值) delimiter=指出values 属性中使用的分隔符,默认是逗号. assign=输出值将被赋给模板变量的名称}>
<{section name=rows loop=$data}>
<{/section}>
结果:不显示
④
debug: {debug} 将调式信息输出到页面上. 该函数是否可用取决于 Smarty 的 debug 设置. 该函数在运行时取得数据,因此不能显示使用中的模板,只能显示运行时被赋值的变量. 不过还是可以看到所有模板内当前可用的变量.
<{debug output=html}>
结果:
⑤eval 按处理模板的方式计算取得变量的值;
{eval var=待求值的变量(或字符串)}
{eval var=输出值将被赋给模板变量的名称}
setup.conf:
emphstart =
emphend =
title = Welcome to <{$company}>'s home page!
ErrorCity = You must supply a <{#emphstart#}>city<{#emphend#}>.
ErrorState = You must supply a <{#emphstart#}>state<{#emphend#}>.
a. html:
<{config_load file="setup.conf"}>
<{eval var=$foo}>
<{eval var=#title#}>
<{eval var=#ErrorCity#}>
<{eval var=#ErrorState# assign="state_error"}>
<{$state_error}>
结果:
Welcome to 's home page! You must supply a city. You must supply astate.
⑥fetch 用于从本地文件系统、HTTP或FTP上取得文件并显示文件的内容.
<{fetch file="待请求的文件,http或ftp方式." assign="输出值将被赋给模板变量的名称"}>
<{fetch file="http://www.myweather.com/68502/" assign="weather"}>
<{if $weather ne ""}>
<{$weather}>
<{/if}>
结果:
⑦html_checkboxes 根据给定的数据创建复选按钮组.
{html_checkboxes name=复选按钮组的名称 values=包含复选按钮组值的数组 checked=$customer_id output=包含复选按钮组显示值的数组 selected=已选定的元素或元素数组 options=包含值和显示的关联数组 separator=分隔每个复选按钮的字符串 labels=是否为每个复选按钮添加
⑧html_image 产生一个图象的 HTML 标签. 如果没有提供高度和宽度值,将根据图象的实际大小自动取得.
{html_image file=图象文件的名称或路径 border=图象边框大小 height=显示图象高度 width=显示图象宽度
basedir=图象文件位置的相对路径 alt=可选图象描述(鼠标指向图象或图象文件不存在时显示的字符串信息) href=图象链接到的地址}
a.html:
<{html_image file="pumpkin.jpg"}>
<{html_image file="/path/from/docroot/pumpkin.jpg"}>
<{html_image file="../path/relative/to/currdir/pumpkin.jpg"}>
结果:
⑨html_options 根据给定的数据创建选项组.
{html_options values=包含下拉列表各元素值的数组 output=包含下拉列表各元素显示值的数组name=下拉菜单的名称 options=$cust_options selected=$customer_id}
⑩自定义函数 html_radios 根据给定的数据创建单选按钮组
{html_radios name="单选按钮列表的名称" values=包含单选按钮值的数组 output=包含单选按钮显示值的数组 options=包含值和显示的关联数组 checked=已选定的元素 separator=分隔每个单选按钮的字符串}
11)自定义函数 html_select_date 用于创建日期下拉菜单. 它可以显示任意年月日.
{html_select_date prefix=变量名称前缀 time=使用时间类型(data/time) start_year=下拉列表中第一个年份,或与当前年份的相对值(正/负 几年) end_year=下拉列表中最后一个年份,或与当前年份的相对值(正/负 几年) display_days=是否显示天 display_months=是否显示月 display_years=是否显示年 month_format=月份的表示方法(strftime) day_value_format=天的表示方法(sprintf) year_as_text=是否以文本方式显示年份 reverse_years=逆序显示年份 field_array=如果指定了名称,选定的区域将以[Day],[Year],[Month]的形式返回给PHP(待考) day_size=如果给定,为标签添加大小属性 month_size=如果给定,为标签添加大小属性 year_size=如果给定,为标签添加大小属性 all_extra=如果给定,为所有标签添加附加属性 day_extra=如果给定,为标签添加附加属性 month_extra=如果给定,为标签添加附加属性 year_extra=如果给定,为标签添加附加属性 field_order=显示区域的顺序 field_separator=各区域间输出的分隔字符串 month_value_format=月份值的strftime表示方法,默认为 %m }
<{html_select_date prefix="StartDate" time=$time start_year="-5" end_year="+1" display_days=false}>
结果:
12)自定义函数 html_select_time 用于创建时间下拉菜单. 它可以显示任意时分秒.
{html_select_time prefix=变量名称前缀 time=使用时间类型(data/time) display_hours=是否显示小时 display_minutes=是否显示分钟 display_seconds=是否显示秒 display_meridian=是否显示正午界(上午/下午) use_24_hours=是否使用24小时制 minute_interval=分钟下拉列表的间隔 second_interval=秒钟下拉列表的间隔 field_array=输出值到该值指定的数组 all_extra=如果给定,为标签添加附加属性 hour_extra=如果给定,为标签添加附加属性 minute_extra=如果给定,为标签添加附加属性 second_extra=如果给定,为标签添加附加属性 meridian_extra=如果给定,为标签添加附加属性}
<{html_select_time use_24_hours=true}>
结果:
13)自定义函数 html_table 将数组中的数据填充到 HTML 表格中.
{html_table loop=待遍历的数组 cols=表格的列数目 table_attr=表格的属性 tr_attr=行标签属性(或轮转数组) td_attr=列标签属性(或轮转数组) trailpad=最后一行附加的数据(如果有的话) hdir=行的对齐方式,可能的值为 left 或 right vdir=列的对齐方式,可能的值为 up 或 down }
例如:
index.php:
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->assign('data',array(1,2,3,4,5,6,7,8,9));
$smarty->assign('tr',array('bgcolor="#eeeeee"','bgcolor="#dddddd"'));
$smarty->display('index.tpl');
index.tpl:
{html_table loop=$data}
{html_table loop=$data cols=4 table_attr='border="0"'}
{html_table loop=$data cols=4 tr_attr=$tr}
结果:
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 |
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 |
14)math 允许模板设计者在模板中进行数学表达式运算.
{math equation=待执行的表达式 format=结果的格式(遵从sprintf函数) var=表达式变量值 assign=输出值将被赋给模板变量的名称}
$height=4, $width=5
<{math equation="x + y" x=$height y=$width}>
结果:9
15) mailto 自动生成电子邮件链接,并根据选项决定是否对地址信息编码.
{mailto address=电子邮件地址 text=邮件链接上显示的文本,默认为电子邮件地址 encode=编码方式,可选值为 none,hex或javascript cc=邮件抄送地址,多条地址信息以逗号分隔 bcc=邮件暗送地址,多条地址信息以逗号分隔 subject=邮件主题 newsgroups=发送到新闻组的地址,多条地址信息以逗号分隔 followupto=追踪地址信息,多条信息以逗号分隔 extra=其它需要传递给链接的信息,如css样式}
{mailto address="[email protected]"}
自动生成:
[email protected]
显示连接