请教关于生成静态问题

#1 phpfans

今天熟悉speedphp的生成静态,主要是生成首页、栏目分页列表、内容页,基本的生成现在没有问题,生成后内容地址也会变为生成后的静态地址,但是栏目导航的地址并没有变成静态地址

栏目导航模板代码
<{foreach from=$nav item=menu}>
   
  • <{$menu.class_name}>

  •   <{/foreach}>

    难道导航需要在模板中手工写成静态地址吗?如:

    <{foreach from=$nav item=menu}>
       
  • <{$menu.class_name}>

  •   <{/foreach}>

    2011-10-12 13:23:17

    #2 jake

    导航链接有配置到rewrite里面去了吗?不配置是用不了的。

    2011-10-12 13:27:38

    #3 phpfans

    配置到rewrite?我是生成真静态,也需要配置rewrite吗?

    我的入口文件配置

            // HTML生成配置  
             'html' => array(  
             'enabled' => TRUE,
                     'safe_check_file_exists' => TRUE,
                     'file_root_name' => '',
            ),

    2011-10-12 13:45:52

    #4 jake

    哦,搞错了,

    生成真实静态文件的话,也需要先生成导航的页面,这样在其他页面生成的时候会用到这些地址。

    如果发现无法生成,检查一下传入的参数是否一致——这很重要。

    2011-10-12 14:07:43

    #5 phpfans

    呵呵,还是没太明白,为了便于说明,贴一下我的代码

    1、文章分页列表
    public function pagelist(){
    if($classid = $this->spArgs("classid")){
    //这里是网站栏目导航
    $this->nav = spClass("lib_class")->findAll("","id DESC","id,class_name","8");
    //文章分页列表
    $this->artlist = spClass("lib_news")->spPager($this->spArgs('page', 1), 2)->findAll(array('classid'=>$classid));
    //分页
    $this->pager = spClass("lib_news")->spPager()->getPager();
    //最新文章
    $this->newlist = spClass("lib_news")->findAll(array( 'classid' => '1' ),"id DESC","id,title","5");
    $this->classid = $classid;
    }else{
    $this->error("栏目ID不能为空!", spUrl("main","index"));
    }
    }

    2、生成分页列表部分

    function list_html(){  
    header("Content-type: text/html; charset=utf-8");
    echo "开始生成列表页面...
    ";     
    $count = spClass('lib_news')->findCount('classid'=>'1');
    $urls = array();  
    for($i = 1;$i <= ceil($count/2);$i++)
    {
    $urls[] = array(
    array('news','nlist',array('classid'=>'1','page'=>(int)$i)), '/html/page_'.(int)$i.'.html' );
    }
    spClass('spHtml')->makeAll($urls);
    echo "列表生成完毕!";
    }

    3、模板部分

    <{foreach from=$nav item=menu}>
       
  • <{$menu.class_name}>

  •   <{/foreach}>

    现在的问题就是生成静态后导航地址没有变为静态页面的地址,你说的先生成导航地址我没太理解,因为导航部分我是直接包含在分页列表的方法中的,而不是单独定义的一个方法。

    2011-10-12 14:44:21

    #6 jake

    简单来说,如果你要A页面的地址是静态地址,那么就要生成A页面成静态HTML文件。
    同理,导航地址你要是静态地址,那么就要先用spHtml生成导航页面的HTML文件。

    你上面只写了列表和内容页,导航页没看到有生成的。

    2011-10-12 15:30:50

    #7 phpfans

    呵呵,晕了
    我的导航是直接写在方法里传给模板的
    $this->nav = spClass("lib_class")->findAll("","id DESC","id,class_name","8");
    这样的怎么生成呢?

    2011-10-12 16:57:10

    #8 jake

    呵呵,晕了
    我的导航是直接写在方法里传给模板的
    $this->nav = spClass("lib_class")->findAll("","id DESC ...
    phpfans 发表于 2011-10-12 16:57
    难道你的导航不是一个个的链接?
    是链接的话,总会链接到一个页面吧。比如说我是导航这就是链接,它链接到http://www.speedphp.com这个页面。
    我的意思是:链接到的那个页面如果已经生成静态HTML的话,那么这个链接就是静态的链接。

    2011-10-12 17:14:47

    #9 phpfans

    呵呵,可能是我表达的不够清楚,

    这个栏目导航
    $this->nav = spClass("lib_class")->findAll("","id DESC","id,class_name","8");
    对应的模板代码是
    <{foreach from=$nav item=menu}>
       
  • <{$menu.class_name}>

  •   <{/foreach}>
    上面的在动态情况下访问是正常的,对应的URL是测试栏目1
    可以正常显示栏目的分页文章。

    但是生成静态时
    array('news','nlist',array('classid'=>'1','page'=>(int)$i)), '/html/page_'.(int)$i.'.html' );
    我是将栏目分页生成为/html/page_1.html,/html/page_2.html 这种形式,
    但是导航还是测试栏目1这种URL,没有变为 测试栏目1

    呵呵,不知道这回有没有说明白,谢谢jake的耐心解答

    2011-10-12 18:12:45

    #10 jake

    没看到这些页面有生成:<{spUrl c=news a=pagelist classid=$menu.id}>

    2011-10-12 18:36:01

    #11 phpfans

    呵呵,虽然没弄明白,但是还是非常感谢,我没理解你说的<{spUrl c=news a=pagelist classid=$menu.id}>应该怎么去生成,请jake有时间时做一个按栏目生成的例子吧。

    2011-10-12 19:28:59

    #12 jake

    http://www.speedphp.com/sphtml-usage.html

    2011-10-12 22:09:00

    #13 lkmtdgt

    还是用新版本的伪静态比较好

    2011-10-12 22:24:10