本帖最后由 pantera_650 于 2010-09-03 18:18:09 编辑

解决方案 »

  1.   

    没用过discuz,这个应该和它的业务逻辑相关性很大。
      

  2.   

    discuz我不熟...大概分析一下假如该帖子有23个回复,连主贴24,.....每页显示10个,
    下面这里: $totalpage=3 
             $page=1(第一页,因为是倒序,所以其实要显示最后10个)
             $thread['replies']=23 
             $ppp=10    $pagebydesc = $page > 50 && $page > ($totalpage / 2) ? TRUE : FALSE
        if($pagebydesc) {
            $firstpagesize = ($thread['replies'] + 1) % $ppp;
            // 这个firstpagesize其实是最后一页, =(23+1)%10=4, 就是最后一页显示的条数        $ppp3 = $ppp2 = $page == $totalpage && $firstpagesize ? $firstpagesize : $ppp;
            // ppp2= 1==3 && 4 ? 4:10 = 10
            // 如果是最后一页($page=3) 就是  ppp2= 3==3 && 4 ? 4:10=4 了
            $realpage = $totalpage - $page + 1;
            // realpage= 3-1+1 = 3, 正过来数的页数
            $start_limit = max(0, ($realpage - 2) * $ppp + $firstpagesize);
            // start_limit = max(0, (3-2)*10+4)= 14
            $numpost = ($page - 1) * $ppp;
            // 这个numpost不知哪里用,反正 = (1-1)*10=0
            $pageadd =  "ORDER BY dateline DESC LIMIT $start_limit, $ppp2";
            // ok,这个sql最后是 limit 14, 10,就取到了最后10条
            // 如果是page=3,那就 limit 0, 4, 就取最前面4条....
        }够清楚了吧?
      

  3.   

    靠,超垃圾的写作风格, $ppp是什么来的, 下面的$start_limit 用下划线, 而$firstpagesize却堆成一块, 估计这几行代码不是同出一人, 
    说话有点过激....
     //这行是判断是否要排序, $page可能是100, 也可能是1, 或者刚符合这里两个条件.
     $pagebydesc = $page > 50 && $page > ($totalpage / 2) ? TRUE : FALSE //如果要排序就继续往下
        if($pagebydesc) {
            //如果只有一页, 或不够一页, 则直接把有多少条记录赋值给$firstpagesize
            $firstpagesize = ($thread['replies'] + 1) % $ppp;        //每页要读多少条记录, 并给其它变量赋值
            //如果只有一页当前的页数$page等于总页数$totalpage, 或少于一页时则$firstpagesize成立
            //否则把预先指定的页数$ppp赋值变量$ppp3, $ppp2(这里分页的记录条数)
            $ppp3 = $ppp2 = $page == $totalpage && $firstpagesize ? $firstpagesize : $ppp;        //真实的页面数, 即分页栏下面[1],[2],[3] ... 那样的字样一共有多少页
            $realpage = $totalpage - $page + 1;        //从第几条记录开始
            $start_limit = max(0, ($realpage - 2) * $ppp + $firstpagesize);        //帖子的数量,在这if()里判断暂时没用
            $numpost = ($page - 1) * $ppp;
     
            //sql字符的排序条件, 整合个判断关键结果就为了这条, 还有一些杂碎的变量
            $pageadd =  "ORDER BY dateline DESC LIMIT $start_limit, $ppp2";
        }
    我不是什么dz高手, 几乎没怎么研究, 以上纯属任个人经验, 对单词字, 计算方法来分析
    另外提一下, 分析代码要结合上下文才有意义, 断章取意毫毛意思, 大家都看到, 上面的变量$ppp3 , $ppp2
     ,  谁知是那什么来的.
    今晚喝了点酒有点晕,  忙中有错,  观众帮忙指正,
    另外, 问候一下helloyou0, 注解的风格在代码下面, 个人认为好像不太通用.
      

  4.   

    完全同意啊《Csdn收音机》,让哥不只是传说!
      

  5.   

    很遗憾,你弄错了!
    因为有 
    $pagebydesc = $page > 50 && $page > ($totalpage / 2) ? TRUE : FALSE;
    if($pagebydesc) { ...
    所以他不是 主题帖子内页面分页处理的代码
    要让 if($pagebydesc) 成立,必须 $totalpage >= 103,按 discuz 的默认设置每页30条,需要有3089条回复才能满足你说:在网上搜了一下,说这里是自动倒序
    很难想象这个 自动倒序 是什么样的需求,能在什么环境中得以使用
    以我经常去的创幻和macd(他们用的就是discuz)为例两三百也得热门贴比比皆是。当你辛辛苦苦的爬楼到1500楼后突然发现楼倒了,倒过来了。你是什么感觉,不骂娘才怪呢至于算法楼上都说了,我也没有必要重复