请问speedphp如何实现通用的网站导航?

#1 phpfans

呵呵,又来请教了,我想实现通用的网站导航,但是卡壳了,先说下我的实现步骤:
1.建立分类表class
2.main.php 中建立public function nav(){---}读取分类数据,测试 index.php?c=main&a=nav 分类数据已经成功获取。
3.在需要调用分类的页面模板中使用<{include file="main_nav.html"}>来获取分类数据,但是测试失败。

请问我的思路是否正确,是否有更好的实现方式?谢谢

2011-10-06 17:36:58

#2 jake

思路有些不正确了,<{include file="main_nav.html"}>这是模板的包含语法,而index.php?c=main&a=nav是一个浏览器使用的URL。两者不能等同。

这里介绍个简单的方法。
index.php?c=main&a=nav 这个action可以显示导航的HTML,那么尝试使用display的第二个参数。
原来如果是
$this->display('main_nav.html');
那么就改成
return $this->display('main_nav.html', true);

这样在另一个页面的action中,可以
$this->pagenav = $this->nav(); // 都在main这个控制器下的话
在模板里面就
<{$pagenav}>
即可显示由main/nav产生的导航HTML

2011-10-07 16:55:44

#3 phpfans

谢谢jake,在看到你的回复前,我又测试了一下在action 中加入 $this->navlists = spClass("lib_class")->findAll(); ,然后再模板中<{foreach from=$navlists item=navlist}>的方式来实现,虽然没有实现通用的目的,但是可以取到栏目信息了。.
    你提供的方式会更简洁一些,不过我有个想法,在制作网站的过程中,有很多版块都是要重复出现的。比如导航栏,最新文章,热点文章,推荐文章等,我以前的做法是定义一个类,然后写一个方法,比如 artlist(栏目ID,文章属性,排序方式),然后在页面中artlist(1,1,1),改变参数即可实现获取最新、热点、推荐等文章的通用方式。我个人觉得挺方便的,因为只要定义一次,就可以很多地方通用了,当然,这里不能排除个人的习惯因素,我对SpeedPHP熟悉的还不够,也许本身就已经可以实现我说的方式。
    呵呵,罗嗦了一大堆,实际上就一句话,对于有共性的版块,可以实现方便的通用。

2011-10-08 12:19:31

#4 jake

你说的方法,其实在MVC架构的SP里面,实现起来也很简单,就是建立一个新的controller(继承与spController),然后其他的controller再继承于这个新的controller,那么这个controller的全部方法都是“公用”的了。

具体可以搜索一下论坛,我曾经发有此类的代码例子。

2011-10-08 20:14:02

#5 phpfans

没有搜到例子,不过你说的我懂了,谢谢jake

2011-10-08 23:02:17

#6 jake

这里有
http://bbs.speedphp.com/thread-280-1-1.html?tid=280&page=1
http://bbs.speedphp.com/thread-1783-1-1.html

2011-10-08 23:30:10