求分析生成文章分页的问题

#1 sghwcw

      折腾一晚上了,搜索论坛,好像也很少人讨论这个,我打算用百度编辑器里的分页标记,结合论坛里上海滩朋友提供的分页函数,动态分页调试成功,但是把文章分页生成静态出现了问题,有的页面静态分页链接正确,有的是错的,弄了一晚上未果.
     下面是代码,麻烦jake有空给看看,这样的静态该怎么生成.谢谢

public function html(){
                echo "开始生成留言本内容页面...";
  $pinyin=spClass("spPinyin");  //拼音类
                $urls = array();
                $db = spClass("lib_topic");
                if( $db = $db->spLinker()->findAll() ){ // 获取到全部的留言来进行spUrl的构造
                        foreach($db as $value){ // 循环
   $p=count(explode('_baidu_page_break_tag_',$value['nrgl']['content']));  //获取分页数量
for($i=1;$i<=$p;$i++){
$urls[] =  array(array('topic','view',array('id'=>$value['id'],'p'=>$i)),$pinyin->Pinyin($value['lmgl']['name'])."/".$pinyin->Pinyin($value['title'])."_".$i.".html");
}
                spClass('spHtml')->makeAll($urls); // 使用makeAll来制作
  $urls=array();  
  }  
                }
                echo "留言本内容页面生成完毕!";
}

2012-09-11 13:05:37

#2 jake

我也是搜索论坛的哦,结果非常多,都可以作为参考,基本可以确定是:

注意 array('id'=>$value['id'],'p'=>$i) 这两个变量值的类型。

2012-09-11 13:12:44

#3 sghwcw

jake 发表于 2012-9-11 13:12
我也是搜索论坛的哦,结果非常多,都可以作为参考,基本可以确定是:

注意 array('id'=>$value['id'],'p'= ...
谢谢,这个方面昨晚我已经折腾过啦.
我看了规律,我觉得是检测文件存不存在这儿有点问题

比如:一共有六页

点第一页的地址( xxx_1.html ),鼠标移到分页那,第二页到第六页都是动态地址!
点第二页的地址(  index.php?c=topic&a=view&id=5&p=2  ),鼠标移到分页那,分页地址正常,全部返回的是静态地址.
点第三页的地址( xxx_3.html ),鼠标移到分页那,第一第二页返回静态地址,第四页到第六页都是动态地址!
.
.
.

从上面的规律来看,和循环生成的规律来看,是不是因为生成第一页的时候其它页面检测的结果,肯定不存在,所以返回的是动态地址.
生成第二页的时候第一页存在,所以返回静态地址,后面的没有生成,仍然返回动态地址呢?

2012-09-11 14:33:41

#4 jake

不是,sphtml没有检测文件的机制。

搜索论坛得出的结果也说了:

spHtml是根据前面生成的地址(不管有没有生成,都会把动态和静态的地址对应写到临时文件中)读取然后在页面上给出地址的。这是spUrl的功能,和生成静态没关。

也就是说,如果A页面地址有设置到spHtml的make或者makeAll里面(不管有没有生成),那么在网站任何地方,包括静态和动态的页面,用spUrl来显示A页面的地址,都会是静态的。

而且spHtml的两次检查的机制,在某个帖子里面也说明了。

最好还是按搜索论坛的结果说的参数对应来做吧。

建议好好看看搜索论坛的结果!想当然是没有意义的!

2012-09-11 14:38:30

#5 小双

这段代码改下,可以在循环里面生成单页面:
 
......
foreach($db as $value){ // 循环
   $p=count(explode('_baidu_page_break_tag_',$value['nrgl']['content']));  //获取分页数量
for($i=1;$i<=$p+1;$i++){   spClass('spHtml')->make(array('topic','view',array('id'=>$value['id'],'p'=>$i)),$pinyin->Pinyin($value['lmgl']['name'])."/".$pinyin->Pinyin($value['title'])."_".$i.".html");
}
......
可以参考下我的站http://www.aift.cn/article/pages_1.html,我之前没注意分页生成静态,今天看到自己加上去了,把自己的想法贴出来。

2012-09-11 15:42:54

#6 小双

spClass('spHtml')->makeAll($urls); // 使用makeAll来制作
  $urls=array();  
这些就不需要了

2012-09-11 15:47:30

#7 sghwcw

多谢jake和小双的回答,我一会再鼓捣下看看

2012-09-11 18:41:51

#8 zhgzzy

长文章分页函数:
spAddViewFunction('fp','fp');
/**
         * 文章分页
        */
function fp($params)
{
    $arid = $params['a'];
    $p = $params['p'];
    $contents = $params['c'];
    $arr1 = explode('
',$contents);    //数组长度&总页数
        $arr2 = explode('
',$contents);    //数组长度&总页数
        if ($arr1 < $arr2){
                $arr = $arr2;
        }else{
                $arr = $arr1;
        }
    $total = count($arr);    //当前页
    $nowpage = $p?$p:1;    //上页   

    $pdiv = '
';
    //$pdiv .= "总{$nowpage}/{$total}页";

    for($i = 1; $i<=$total; $i++)
    {        
        $url = spUrl(main,view,array('id'=>$arid,'p'=>$i));
                if ($i==$nowpage){
                $pdiv .= "{$i}";
                } else {
                $pdiv .= "{$i}";
                }
    }

    $pdiv .= '

';    //输出内容
    echo $arr[$nowpage-1];    //不分页则不显示分页列表
    if( $total <=1) $pdiv = '';    //输出分页列表
        echo $pdiv;       
}
模板调用:

<{fp a=$results.id p=$p c=$results.content}>

2012-09-13 11:14:00

#9 zhgzzy

{:soso_e113:}  我也是从speedphp开始学php的,代码可能不是很好,高手可以自己优化一下,当然优化后还请分享一下!!!

2012-09-13 11:25:51