spAddViewFunction 注册函数使用方法 探索

#1 coolcool1265

一、基本使用
spAddViewFunction 的简单实用,可以参考
http://bbs.speedphp.com/viewthread.php?tid=115&from=favorites

二、如何调用model,如何实现和widget相差不多的效果呢?

1.进行注册

require(SP_PATH."/SpeedPHP.php");
//----------也可以写到一个php文件中,include这个文件。-----问题1.这么多函数,会不会影响性能?
//----------向view注册函数----------------------
//可以直接调用Model
function winfoblock($params,$smarty){//--问题2.$smarty,这个参数名字可以自定义,那还有其他参数没?共有几个,都是什么功能?

$catid=$params['catid'];

$wiarr=spClass('infoModel')->findAll(array('categoryid'=>$catid));

$smarty->assign('wiArr', $wiarr);
}
// 向view注册
spAddViewFunction('infoblock','winfoblock');
//------------------------------------------
spRun();
?>
2.如何使用?


(1)可以写在winfoblock.html文件中,在smarty中,include这个模板文件。
---------View下的--winfoblock.html----------------------

<{infoblock catid=5}>                  
<{foreach from=$wiArr item=wlist}>

<{$wlist.infonum}>  <{$wlist.infoname}>

<{/foreach}>

(2)直接写需要的模板中

2011-11-19 17:46:35

#2 coolcool1265

注册的函数,除了可以调用Model外,还可以调用controller。
但是,用controller的时候:

function winfoblock($params){
        $spc=new spController();
        $spc->arr=spClass('stuinfoModel')->findAll();
        $spc->display('test.html');
}

总会出现一行空白,然后所有的东西都左对齐了。

虽然采用了jake的建议,清除了BOM,但是还不行。而且有时候可能是因为没有BOM,中文就变成乱码了。
所以,才直接在注册函数中用Model。省去Controller这个环节。

2011-11-19 17:52:09

#3 coolcool1265

问题1和问题2,请帮忙解答一下吧。搞不懂咯~

2011-11-19 17:52:49

#4 coolcool1265

问题2已经解决

要注册的函数只有2个参数,第二个参数是Smarty_Internal_Template Object ,之所以将内容输出到模板,是为了方便显示的内容和显示的样式。

谢谢jake指教。

2011-11-19 18:39:53

#5 jake

问题1是注册函数放什么地方?对吧。

看手册 http://www.speedphp.com/view-functions.html

2011-11-19 22:34:45