1. 程式人生 > >discuz分頁的使用

discuz分頁的使用

Discuz的分頁函式multi分析,在global.func.php檔案中。

先看下幾個引數吧

   $num 為總共的條數   比如說這個分類下共有15篇文章
   $perpage為每頁要顯示的條數
   $curpage為當前的頁數
   $mpurl為url的除去表示頁數變數的一部分
   $page為$multipage這個字串中要顯示的表示頁數的變數個數
   $maxpages為最大的頁數值   此函式最後有一句$maxpage = $realpages;
<?php
function multi($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = TRUE, $simple = FALSE) {      
    global $maxpage;      
    $ajaxtarget = !empty($_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" mce_href="'.$mpurl.'page=1" class="first"'.$ajaxtarget.'>1 ...</a>' : '').      
            ($curpage > 1 && !$simple ? '<a href="'.$mpurl.'page='.($curpage - 1).'" mce_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 ? '#' : '').'" mce_href="'.$mpurl.'page='.$i.($ajaxtarget && $i == $pages && $autogoto ? '#' : '').'"'.$ajaxtarget.'>'.$i.'</a>';      
        }      
     
        $multipage .= ($curpage < $pages && !$simple ? '<a href="'.$mpurl.'page='.($curpage + 1).'" mce_href="'.$mpurl.'page='.($curpage + 1).'" class="next"'.$ajaxtarget.'>››</a>' : '').      
             ($to < $pages ? '<a href="'.$mpurl.'page='.$pages.'" mce_href="'.$mpurl.'page='.$pages.'" class="last"'.$ajaxtarget.'>... '.$realpages.'</a>' : '').      
             (!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3"   /></kbd>' : '');      
     
        $multipage = $multipage ? '<div class="pages">'.(!$simple ? '<em> '.$num.' </em>' : '').$multipage.'</div>' : '';      
      }      
      $maxpage = $realpages;      
      return $multipage;      
}  

// 大家也可以順便看下我的例項:
$list = array();
$pricount = 0;
$multi = '';
$count = DB::result(DB::query("SELECT COUNT(*) FROM ".DB::table('portal_article_title')." at WHERE $wheresql"), 0);
if($count) {
    $query = DB::query("SELECT * FROM ".DB::table('portal_article_title')." at WHERE $wheresql ORDER BY at.dateline DESC LIMIT $start,$perpage");
    while ($value = DB::fetch($query)) {
        $value['catname'] = $value['catid']==$cat['catid']?$cat['catname']:$cat['subs'][$value['catid']]['catname'];
        if($value['pic']) {
          $value['pic'] = pic_get($value['pic'], 'portal', $value['thumb'], $value['remote']);
        }
        $value['dateline'] = dgmdate($value['dateline']);
        if($value['status'] == 0 || $value['uid'] == $_G['uid'] || $_G['adminid'] == 1) {
            $list[] = $value;
        }else{
            $pricount++;
        }
    }
    $multi = multi($count, $perpage, $page, $cat['caturl']);
}

// 例項
$cat['caturl']="list.php?ac=1";
$wheresql = "at.catid='$catid'";
$wheresql .= " AND at.status='0'";
$perpage = 3;
$page = max(1, intval($_GET['page']));
$start = ($page-1)*$perpage;
if($start<0) $start = 0;
$list = array();
$pricount = 0;
$multi = '';
$count = DB::result(DB::query("SELECT COUNT(*) FROM ".DB::table('portal_article_title')." at WHERE $wheresql"), 0);
if($count) {
    $query = DB::query("SELECT * FROM ".DB::table('portal_article_title')." at WHERE $wheresql ORDER BY at.dateline DESC LIMIT $start,$perpage");
    while ($value = DB::fetch($query)) {
        $list[] = $value;
    }
    $multi = multi($count, $perpage, $page, $cat['caturl']);
}