请教一个关于smarty下模块通用性的问题

#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