这次的东西是配合xajax搞的,按照xajax的习惯,习惯将一个相关请求的功能用三个文件来写,分别是some.php、some.common.php、some.server.php;对于一个模板,如果只在some.php里面对模板中的变量进行赋值,那是很容易的;但是如果模板中某一部分的内容不是在页面加载的第一时间显示,而是希望用ajax来显示时怎么办呢?今天研究了一下午,到头来发现其实也很容易。
我要实现的效果是:主模版只需要在页面加载时将xajax的js代码输出,并且显示一个等待图片,然后在页面加载完成后再显示主要部分——几个广告图片(模板定义在子模板中)。
对于子模板中的数据,是在ajax请求后在后台处理的,一开始我把smarty类的实例化写在some.common.php中,以为在some.server.php被请求的时候smarty对象就会起作用了,结果错了,对象的作用域不能跨文件。于是,在处理请求的函数中再实例化smarty类一次,然后$smarty->assign()相关变量,并且$smarty->fetch()捕获到子模板要输出的html代码,最后用$objResponse->assign()将某个标签的innerHTML替换为刚刚捕获到的html代码,return $objResponse....OK!!
这样就搞定了!看来smarty模板是适应WEB新时代的,关键看怎么用!