Discuz中的分页函数

Discuz中的分页函数

这个分页函数是discuz中的,感觉这个分页函数相当经典,而且看到好多其他程序的分页效果也是用的这个函数。读完这个分页函数后给我的感觉是这个分页函数做的太全面了,作者考虑的太全面了,在用的同时也给我们写程序树立了个榜样,

水平有限  其中的错误敬请指正
免费内容:
//先看下几个参数吧   
//$num 为总共的条数  比如说这个分类下共有15篇文章   
// $perpage为每页要显示的条数   
//$curpage为当前的页数   
//$mpurl为url的除去表示页数变量的一部分,   
//$page为$multipage这个字符串中要显示的表示页数的变量个数   
//$maxpages为最大的页数值  此函数最后有一句$maxpage = $realpages;   
function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = TRUE, $simple = FALSE) {   
    global $maxpage;   
    $ajaxtarget = !emptyempty($_GET['ajaxtarget']) ? " ajaxtarget=\"".dhtmlspecialchars($_GET['ajaxtarget'])."\" " : '';   
   
    $multipage = '';   
    $mpurl .= strpos($mpurl, '?') ? '&' : '?';   
    $realpages = 1;   
     //判断总条数是否大于设置的每页要显示的条数   
    if($num > $perpage) {   
    //设置在$multipage中当前页数之前还要输出几个页数   
        $offset = 2;   
   
        $realpages = @ceil($num / $perpage);   
    //总共的页数(不知道$maxpages的意思),这里假设是15条   
        $pages = $maxpages && $maxpages < $realpages ? $maxpages : $realpages;   
    //如果总页数小于multipage中要输出的页数$page,则只输出到实际页数为止      
        if($page > $pages) {   
            $from = 1;   
            $to = $pages;   
    //如果大于的话,就要输出$page个页数(我们假设的的15条就符合这个条件)   
        } else {   
            $from = $curpage - $offset;   
            $to = $from + $page - 1;   
            //假设curpage为4,目前为止,from为2,to为11   
            //下面假设curpage为1   
         
            if($from < 1) {   
                $to = $curpage + 1 - $from;(****不明白***)   
                $from = 1;   
                //目前为止from为1,to为3   
                if($to - $from < $page) {   
                    //因为这里的前提条件是总条数大于page,所以,如果$to-$from小于page的话显然达不到目的,应把$to设置为$page   
                    $to = $page;   
                }//目前为止 from为1 ,to为10   
            } elseif($to > $pages) {//to是不可以大于总页数的   
                $from = $pages - $page + 1;   
                $to = $pages;   
            }   
         
        }   
   
        $multipage = ($curpage - $offset > 1 && $pages > $page ? '<a href="'.$mpurl.'page=1" class="first"'.$ajaxtarget.'>1 ...</a>' : '').   
            ($curpage > 1 && !$simple ? '<a href="'.$mpurl.'page='.($curpage - 1).'" class="prev"'.$ajaxtarget.'>‹‹</a>' : '');   
        for($i = $from; $i <= $to; $i++) {   
            $multipage .= $i == $curpage ? '<strong>'.$i.'</strong>' :   
                '<a href="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : '').'"'.$ajaxtarget.'>'.$i.'</a>';   
        }   
   
        $multipage .= ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'" class="next"'.$ajaxtarget.'>››</a>' : '').   
            ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.'" class="last"'.$ajaxtarget.'>... '.$realpages.'</a>' : '').   
            (!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=\''.$mpurl.'page=\'+this.value; return false;}" /></kbd>' : '');   
   
        $multipage = $multipage ? '<div class="pages">'.(!$simple ? '<em> '.$num.' </em>' : '').$multipage.'</div>' : '';   
    }   
    $maxpage = $realpages;   
    return $multipage;   
}   

重新写了一个分页类

[复制到剪切板]
CODE:
class pagination extends mysql{
//分页类
    
var $totalrows 0;//共有信息条数
    
var $messagenum;//每页信息条数
    
var $pageindex;//当前页数
    
var $pagesnum;//共显示多少页
    
var $pageprenum;//当前页之前显示多少页
    
var $expansion;//扩展
    
var $totalpages;//总页数
    
var $self;//当前文件
    
var $psumarr = array();
    var 
$plistarr = array();
    
    function 
pagination($mnum,$page,$pnum,$ppre,$num=0,$sql='',$exp=''){
    
//构造函数
        
$this->messagenum $mnum;
        
$this->pageindex $page;
        
$this->pagesnum $pnum;
        
$this->pageprenum $ppre;
        
$this->expansion $exp;
        
$this->self $_SERVER['PHP_SELF'];
        
        if(
$num
            
$this->totalrows $num;
        elseif(
$sql){
            
$query $this->query($sql);
            
$rows $this->fetch_array($query,MYSQL_NUM);
            
$this->totalrows $rows[0];
        }
    }
    
    function 
pageSum(){
        
$this->totalpages ceil($this->totalrows/$this->messagenum);
        
$this->psumarr[] = $this->totalrows;
        
$this->psumarr[] = $this->pageindex."/".$this->totalpages;
    }
    
    function 
pagePre(){
        return 
$this->pageindex 1;
    }
    
    function 
pageNext(){
        return 
$this->pageindex 1;
    }
    
    function 
pageBefore(){    
        if(
$this->pageindex != 1){
            
$this->plistarr['first'] = array($this->self."?page=1".$this->expansion"|&lsaquo;");
            
$this->plistarr['pre'] =  array($this->self."?page=".$this->pagePre().$this->expansion"&lsaquo;&lsaquo;");
        }

    }
    
    function 
pageList(){
        if(
$this->pagesnum >= $this->totalpages){
            
$pgstart 1;
            
$pgend $this->totalpages;
        }
        elseif((
$this->pageindex $this->pageprenum -$this->pagesnum) > $this->totalpages){
            
$pgstart $this->totalpages $this->pagesnum 1;
            
$pgend $this->totalpages;
        }
        else{
            
$pgstart = (($this->pageindex <= $this->pageprenum)?1:($this->pageindex-$this->pageprenum));
            
$pgend = (($pgstart == 1)?$this->pagesnum:($pgstart $this->pagesnum 1));
        }

        for(
$pg=$pgstart;$pg<=$pgend;$pg++){
                
$this->plistarr[$pg] =  array($this->self."?page=".$pg.$this->expansion$pg);
        }
    }
    
    function 
pageAfter(){
        if(
$this->pageindex != $this->totalpages){
            
$this->plistarr['next'] = array($this->self.'?page='.$this->pageNext().$this->expansion"&rsaquo;&rsaquo;");
            
$this->plistarr['last'] = array($this->self.'?page='.$this->totalpages.$this->expansion"&rsaquo;|");
        }    
    }
    
    function 
htmlTag($tag,$attr='',$content=''){
        if(
$content == '')
           return 
'<'.$tag.(($attr=='')?'':' '.$attr).'>';
        else 
            return 
'<'.$tag.(($attr=='')?'':' '.$attr).'>'.$content.'</'.$tag.'>';
    }    
    
    function 
pageFormat(){
        
        
//----------------------------
        
$this->pageSum();
        
$this->pageBefore();
        
$this->pageList();
        
$this->pageAfter();
        
        
$pagestr '';
        foreach(
$this->psumarr as $value){
            
$pagestr .= $this->htmlTag('li','class="p_num"',$this->htmlTag('b','',$value));
        }
        
        foreach(
$this->plistarr as $key => $val){
            if(
$key == $this->pageindex){
                
$pagestr .= $this->htmlTag('li','class="p_curpage"',$this->htmlTag('a','href="'.$val[0].'"',$val[1]));
            }
            else{
                
$pagestr .= $this->htmlTag('li','class="p_num"',$this->htmlTag('a','href="'.$val[0].'"',$val[1]));
            }    
        }
        
        return 
$pagestr;
    }
} ;


毕业了。。。

老大就是老大
收下了
仔细学习下!

好长的代码哦,学习中!