The DoYouHaoBaby PHP Framework中文开发文档手册
Copyright(c) DoYouHaoBaby.NET All Rights Reserved.
[ 使用函数 ]

仅仅是输出变量并不能满足模板输出的需要,内置模板引擎支持对模板变量使用调节器和格式化功能,其实也就是提供函数支持,并支持多个函数同时使用。用于模板标签的函数可以是PHP 内置函数或者是用户自定义函数,和smarty不同,用于模板的函数不需要特别的定义。

模板变量的函数调用格式为:

  1. {$varname|function1|function2=arg1,arg2,** }   

说明:

  1. { 和 $ 符号之间不能有空格 ,后面参数的空格就没有问题
  2. **表示模板变量本身的参数位置
  3. 支持多个函数,函数之间支持空格
  4. 支持函数屏蔽功能,在配置文件中可以配置禁止使用的函数列表


程序编译后的结果为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-09 14:35:19  */ ?>   
  2. <?php echo( function2( arg1,arg2,function1($varname) ) ); ?>   


模板中如果不加**的格式为:

  1. {$varname|function1|function2=arg1,arg2 }   

程序编译后的结果为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-09 14:37:25  */ ?>   
  2. <?php echo( function2( function1($varname),arg1,arg2 ) ); ?>   


使用例子:

首先,我们向模板传递值:

  1. $sContent = 'Welcome to user DoYouHaoBaby, we hope that your can remember our DoYouHaoBaby, thank u !';   
  2. $this->assign( 'sContent',$sContent );   

然后,我们在模板中使用如下代码:

  1. {$sContent|strtoupper|substr=0,3}  

程序编译后,编译后的代码为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-09 14:43:28  */ ?>   
  2. <?php echo( substr( strtoupper($sContent),0,3 ) ); ?>  

程序最后运行结果为:
WEL

注意:函数的定义和使用顺序的对应关系,通常来说函数的第一个参数就是前面的变量或者前一个函数使用的结果,如果你的变量并不是函数的第一个参数,需要使用定位符号,例如:

首先,我们向模板传递一个时间值:

  1. $nDate = time();   
  2. $this->assign( 'nDate',$nDate );   

然后,我们在模板中使用如下代码:

  1. {$nDate|date="Y-m-d",**}  

程序编译后,编译后的代码为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-09 14:47:26  */ ?>   
  2. <?php echo( date( "Y-m-d",$nDate ) ); ?>   

程序最后运行结果为:

  1. 2002-01-09  

如图:

(注:由于我的电脑时间没有对准,又一直没有调,所以是2002年,现在是 2011年。)


函数的使用没有个数限制,但是可以允许配置TEMPLATE_NOT_ALLOWS_FUNC定义禁用函数列表,系统默认禁用了exit和echo函数,以防止破坏模板输出,我们也可以增加额外的定义,例如:

  1. 'TEMPLATE_NOT_ALLOWS_FUNC'=>"echo,exit,halt"  

多个函数之间使用半角逗号分隔即可。

 

并且还提供了在模板文件中直接调用函数的快捷方法,无需通过模板变量,包括两种方式:

1、执行方法并输出返回值:

格式:{:function(…)}

例如,输出G::U方法的返回值:

  1. {:G::U('demo/list')}  

编译后的PHP 代码为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-09 15:00:37  */ ?>   
  2. <?php echo( G::U('demo/list') );?>  


浏览器运行结果为:

  1. /doyouhaobaby/TestApp/index.php/demo/list  

如图:

2、使用静态函数来格式化参数

我们在模板中写下如下的代码:
  1. {~$nCurrentTime=time()}   
  2. {$nCurrentTime|Date+smartDate}   

程序编译后:
  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2011-11-13 18:42:58  */ ?>   
  2. <?php $nCurrentTime=time() ; ?>      
  3. <?php echo( Date::smartDate($nCurrentTime) ); ?>     

程序运行结果如下:
约 0 小时前

3、执行方法但不输出:

格式:{~function(…)}

例如,调用test函数:

首先我们定义一个test函数如下:

  1. function test( $sStr ){   
  2.   
  3.    echo 'test函数的参数$sStr的值为:'.$sStr;   
  4. }  


接下来,我们在模板写下如下的代码:

  1. {~test('DoYouHaoBaby')}   

程序编译后的PHP 代码为:

  1. <?php !defined('DYHB_PATH') && exit; /* DoYouHaoBaby Framework 模板缓存文件 生成时间:2002-01-09 15:09:58  */ ?>   
  2. <?php test('DoYouHaoBaby') ; ?>  

程序最后运行结果为:

  1. test函数的参数$sStr的值为:DoYouHaoBaby