smarty自定义函数

来源:互联网 发布:数据分析师考试报名 编辑:程序博客网 时间:2024/05/17 07:54
 

 

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

 

类似于:<input  type=”text”  name=”input1”>

 属性无顺序要求

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.=“<font size=”.$args[‘size’].”>”.$args[content].”</font><br>”;

}

     return $a;

}

 

2)注册块

   $tpl->register_block(“模板文件中的块名”,”php中的函数名”)

<hr />

<br />

<a> </a>块

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.=”<font  size=”.$args[“size”].”>”.$content.”</font><br>”;

}

              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:

           <?php

 

function smarty_function_world($args, &$smarty){

  

                   $a="";

  

                   for($i=0;$i<$args["num"];$i++){

     

                   $a.= "<font size=".$args["size"].">".$args["content"]."</font><br>";

     

               }

  

                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:

           <?php

 

function smarty_function_world($args,$content){

  

                $a="";

  

               for($i=0;$i<$args["num"];$i++){

     

                 $a.= "<font size=".$args["size"].">".$content."</font><br>";

     

                }

  

              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}><br>

<{counter}><br>

<{counter}><br>

<{counter}><br>

结果: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}>

<tr bgcolor="{cycle values="#eeeeee,#d0d0d0" print=true}">

             <td><{$data[rows]}></td>

</tr>

<{/section}>

结果:不显示

 

debug: {debug} 将调式信息输出到页面上. 该函数是否可用取决于 Smarty 的 debug 设置. 该函数在运行时取得数据,因此不能显示使用中的模板,只能显示运行时被赋值的变量. 不过还是可以看到所有模板内当前可用的变量.

<{debug output=html}>

结果:

 

 

⑤eval 按处理模板的方式计算取得变量的值;

{eval var=待求值的变量(或字符串)}
{eval var=输出值将被赋给模板变量的名称}

 

setup.conf:

emphstart = <b>

emphend = </b>

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 ""}>

             <b><{$weather}></b>

<{/if}>

        结果:

        

 

      ⑦html_checkboxes 根据给定的数据创建复选按钮组.

      {html_checkboxes name=复选按钮组的名称 values=包含复选按钮组值的数组 checked=$customer_id output=包含复选按钮组显示值的数组 selected=已选定的元素或元素数组 options=包含值和显示的关联数组 separator=分隔每个复选按钮的字符串 labels=是否为每个复选按钮添加 <label> 标签 }
 

  

     ⑧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"}>

      结果:

        <img src="pumpkin.jpg" alt="" border="0" width="44" height="68" />

<img src="/path/from/docroot/pumpkin.jpg" alt="" border="0" width="44" height="68" />

<img src="../path/relative/to/currdir/pumpkin.jpg" alt="" border="0" width="44" height="68" />

 

     ⑨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=列的对齐方式,可能的值为 updown }

 

例如:

 

    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}
 
结果:
 
<table border="1">
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>
<table border="0">
<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</table>
<table border="1">
<tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr bgcolor="#eeeeee"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</table>

 

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="me@domain.com"}
自动生成:
<a href="mailto:me@domain.com" >me@domain.com</a>

显示连接