添加自定义函数的简单方法

#1 cygsd

在PHP框架系列中,SpeedPHP中文框架算是最简洁的,对于PHP框架初学者来说,非常容易上手。下面介绍如何在SpeedPHP框架中添加自定义函数。
只需要这一步:
打开spFunctions.php文件,增加如下函数:
 function getToday() {    //返回类似2010-03-04格式的当前日期
       return date("Y-m-d");
}  

测试:在任意模板Html中添加如下程序测试一下:
 今天是{getToday} 

运行结果:
今天是2010-03-04

如果显示上面的结果,说明自定义函数添加成功了。以后在模板中就可以方便的使用{getToday}获取当前日期了。

2010-03-04 17:37:08

#2 jake

不建议修改框架内部的文件,一般我们用框架也好,函数库或者是类库都好,如无非常必要,不建议修改内部文件。

PHP函数可以写到index.php文件或者是新建一个文件然后在index.php里面用require载入。

---------------

PS:之前说是import载入,但是index.php本身没有加载import的定义,所以改成了require

2010-03-04 19:39:47

#3 cygsd

在index.php中使用import,提示未定义。
根据jake的建议,新建了tpl/public/comm.php文件,内容如下:
 
function getToday(){
return date("Y-m-d");
}

修改index.php文件如下:
 
define("SP_PATH",dirname(__FILE__)."/SpeedPHP");
define("APP_PATH",dirname(__FILE__)."");
date_default_timezone_set('Asia/Shanghai');//设置本地时区
require(APP_PATH."/tpl/public/comm.php"); //加载自定义函数
require(SP_PATH."/SpeedPHP.php");

经过这样修改后,可以正常使用。

2010-03-04 22:41:16

#4 cygsd

另外,问一下jake,这个自定义函数还需要用spAddViewFunction()注册吗?
我试了一下,不注册好像没问题。

2010-03-04 22:46:35

#5 jake

试了一下,上面那个getToday的使用形式不起作用。

一般而言,smarty是注重信息屏蔽的,所以从smarty本身的架构来说,没有注册的函数是不能在模板内执行的。楼主这种写法在某些模板引擎里面有出现,但是其实可以说是为了方便而摒弃了模板引擎的理念了,这样并不推荐!

(另一种情况是调低smarty的安全设置,这样不知道能不能不注册直接用函数,不过当然是不推荐的方法。)

2010-03-05 09:10:15

#6 cygsd

还有个问题,spAddViewFunction()应该放到哪里?
我是放到spView.php里面去了,在构造函数最后。如下:
 spAddViewFunction('spUrl', array( $this, '__smarty_spUrl'));//这是原来就有的
spAddViewFunction('getToday','getToday');//这是新加的

不知道这样做对不对?
如果是对的,这又与jake前面说的不要修改框架系统文件相矛盾。
如果不对,应该放到什么地方?
请指教。

2010-03-07 14:13:56

#7 cygsd

顶一下,别沉底了。

2010-03-08 21:41:44

#8 jake

昨天写到一半down机了,忘了回复,呵呵:handshake

spAddViewFunction可以放控制器的构造函数里面。具体怎么做,这里很快会有实例来介绍的。

2010-03-09 09:50:49

#9 cygsd

谢谢!万分期待更多的教程和实例。

2010-03-09 22:41:12

#10 jake

http://speedphp.com/bbs/thread-219-1-1.html

该实例中,自定义函数都在model的functions.php里面

2010-03-10 13:00:16

#11 荆柯要打鱼

自定义函数在模板中的配置方法:
1、将自定义函数写到lib/functions.php当中,如
   
// 函数示例,显示当前日期
function mydate(){
return date("Y-m-d",time());
}

2、在config.php当中加载:
require(APP_PATH.'/lib/functions.php');

3、由于默认smarty当中的函数是需要注册才能在模板当中使用,所以需要先进行注册,可以两个地方注册:一是在入口文件当中加上:
   
$spConfig['view_registered_functions'] = array(
'mydate' => 'mydate', //说明key表示函数别名,即在模板当中使用的函数名称;value表示真正自定义的函数名,value如果是数组,则表示可以指向到对象当中的方法
);

二是放在控制器的构造函数当中使用:
spAddViewFunction('mydate', 'mydate');



4、在模板当中直接用:
<{mydate}>

2010-08-23 21:34:53