关于生成静态页的问题

#1 领航设计

这个问题在站内搜索的一下,发现有很多人问。我来总结下问题吧
问题1:一般内容页都能生成的出来,这一点大家都没问题吧,关键的是导航。
准备要生成的文件 新闻模块(http://localhost/index.php?c=news&a=index)包含列表页跟详细页
news控制器内容是 取得新闻内容数组,传递到新闻列表模板,模板内容为
(1,<{include file="header.html"}> 载入头部模版
   2,根据传递过来的新闻内容数组,循环出新闻标题列表  
   3,,<{include file="footer.html"}> 载入尾部模版)
***********************************************
导航全局代码如下:
quanj.php   **** 文件位于 controller文件夹内
// quanj继承于spController,从而代替spController的作用
class quanj extends spController
{
// 构造函数,进行全局操作的位置
function __construct(){
  // 必须加入启动父类构造函数的操作
  parent::__construct();  
  // 开始全局操作
                $newsclass = spClass("newsclass");  
                $this->daohang = $newsclass->findAll();
                $condf_id = array('f_id'=>'1');  
                $this->bdaohang = $newsclass->findALL($condf_id);   
}
}
?>
**************************************
header.html   摸板调用全局的导航内容
<{foreach from=$daohang item=one}>
<{$one.name}>
<{/foreach}>
解说:$one.keyword  从数据库读取出来的等于    ?c=news&a=index  ,是存在数据库 keyword 列表的内容
**********************************
其中导航是写在header.html里面的,通过全局,在header.html模板里直接全局调用$this->bdaohang数组并循环出导航内容
导航循环出来的超链接是?c=控制器名称&a=方法名称(如新闻 领航新闻

问题来的,当生成的时候只能生成列表页,详细页。详细新闻连接地址都换成静态的,静态页面也都有的。就是导航的连接还是
?c=news&a=index 这种样子的

从逻辑上来说我也觉得我的思路是有问题的,因为导航的地址?c=news&a=index 是存在数据库里面的,怎么能变成生成静态列表页地址呢? 内容较多,还请管理员能够详细解说(如果可以说说生成静态的逻辑思路),大家都会感谢您的。  

2012-03-04 19:07:51

#2 jake

因为在已经生成的页面里面,spUrl是无法再修改的。所以生成有个先后问题,先生成的地址,可以在后来生成的地址中是静态地址,但是后来的地址,无法在先前生成的页面是静态地址。

所以spHtml里面有个叫makeAll的方法,这个方法是“两次生成”,第一次会先生成全部静态页面的“地址”(但不生成文件),第二次会生成文件(地址已经是静态的)

你上面的问题,实际上没什么人问,因为如果用例子的方法,用makeAll一次性生成全部需要生成的页面,就不会存在这个问题。除非是不按手册说的做,东一处生成西一处生成。

2012-03-04 20:50:00