请教一个关于smarty下模块通用性的问题
发布于:2022-01-17 09:50:54
#1 longjianghu
在首页我有一个方法action:top10,他的功能是调用最新的十篇文章,我在列表页也需要调用这个,我想问一下用什么方法可以直接调用这个top10显示最新的十篇文章?
2010-08-11 23:17:14
#2 okbb
这个top10肯定出来一个数组,然后在smarty里可以直接调用这个数组变量的。
2010-08-12 00:28:40
#3 jake
建立一个父类继承于spController,然后其他控制器继承于这个父类。把你的这个TOP 10的方法写到这个父类上面去,那么每个子类控制器都可以调用这个TOP 10方法了。当然,smarty模板内的写法依旧。
这个父类还可以放一些比如说主导航菜单等等的公用方法。
其实这种问题有很多解决方法,不过上面说的方法是比较符合MVC和OOP的模式。
2010-08-12 08:58:38
#4 longjianghu
我本意是能不能做成像ecshop中的lbi一样直接调用,而不是重新写
2010-08-12 23:17:29
#5 jake
我本意是能不能做成像ecshop中的lbi一样直接调用,而不是重新写
longjianghu 发表于 2010-8-12 23:17 
这里不是重新写,而是要移动这个action到另一个位置,就可以全局调用了。
控制器和控制器之间建议是不要互相调用,所以你要重复调用的东西,最好能放到其他地方(不在
子控制器上面),比如说放父控制器、model、函数、模板函数等等地方。
2010-08-13 10:00:51
#6 longjianghu
回复 5 jake 我的意思是只写一个action,然后有什么方面能直接在模板里面调用,而不是在其它controller里再写一个assign方法注册一次.
2010-08-13 12:01:50
#7 longjianghu
相当于HMVC这个功能
2010-08-13 12:02:40
#8 jake
是注册到模板的函数?站内查询 spAddViewFunction
我说的是全局调用的方法,只要在父类控制器上面写一个action(action内有$this->数据,将数据发到模板),那么在任何一个控制器和模板内都能使用,不需要任何的调用。
当然,纯“理论”地说无任何意义,看看winblog例子,每个子类控制器的sidebar和header等都是在父类控制器中定义的,在子类控制器中无需任何代码.
2010-08-13 12:29:36