PHP分頁類的使用

jopen 10年前發布 | 32K 次閱讀 PHP PHP開發

PHP分頁類的使用

page.class.php

<?php
    class Page {
        private $total_rows;//數據庫總條數
        private $per_page_rows;//每頁顯示條數
        private $limit;
        private $uri;
        private $total_pages;//總頁數
        private $config=array("header"=>"記錄條數","prev"=>"上一頁","next"=>"下一頁","first"=>"首 頁","last"=>"尾 頁");
        private $list_length=8;
        public function __construct($total_rows,$per_page_rows=10,$url_args){
            $this->total_rows=$total_rows;
            $this->per_page_rows=$per_page_rows;
            $this->uri=$this->get_uri($url_args);
            $this->page = !empty($_GET['page']) ? $_GET['page'] : 1;
            $this->total_pages=ceil($this->total_rows/$this->per_page_rows);
            $this->limit=$this->set_limit();
        }
        private function set_limit() {
            return "limit ".($this->page-1)*$this->per_page_rows.",{$this->per_page_rows}";
        }
        private function get_uri($url_args) {
            $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"],"?") ? "" : "?").$url_args;
            $parse=parse_url($url);
            if (isset($parse['query'])) {
                parse_str($parse['query'],$params);//把url字符串解析為數組
                unset($params['page']);//刪除數組下標為page的值
                $url=$parse['path'].'?'.http_build_query($params);//再次構建url
            }
                return $url;
        }
        public function __get($args) {
            if ($args=="limit") {
                return $this->limit;
            }else{
                return null;
            } 
        }
        private function start_page(){
            if ($this->total_rows==0) {
                return 0;
            }else{
                return (($this->page-1)*$this->per_page_rows)+1;
            }
        }
        private function end_page(){
            return min($this->page*$this->per_page_rows,$this->total_rows);
        }
        private function go_first() {
            $html="";
            if ($this->page==1) {
                $html.="&nbsp;{$this->config['first']}&nbsp;";
            }else{
                $html.="&nbsp;<a href='{$this->uri}&page=1'>{$this->config['first']}</a>&nbsp;";
            }
            return $html;
        }
        private function go_prev() {
            $html="";
            if ($this->page==1) {
                $html.="&nbsp;{$this->config['prev']}&nbsp;";
            }else{
                $html.="&nbsp;<a href='{$this->uri}&page={$this->page}-1'>{$this->config['prev']}</a>&nbsp;";
            }
            return $html;
        }
        private function go_next() {
            $html="";
            if ($this->page==$this->total_pages) {
                $html.="&nbsp;{$this->config['next']}&nbsp;";
            }else{
                $html.="&nbsp;<a href='{$this->uri}&page={$this->page}+1'>{$this->config['next']}</a>&nbsp;";
            }
            return $html;
        }
        private function go_last() {
            $html="";
            if ($this->page==$this->total_pages) {
                $html.="&nbsp;{$this->config['last']}&nbsp;";
            }else{
                $html.="&nbsp;<a href='{$this->uri}&page={$this->total_pages}'>{$this->config['last']}</a>&nbsp;";
            }
            return $html;
        }
        private function go_page() {
            return '&nbsp;<input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>'.$this->total_pages.')?'.$this->total_pages.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}" value="'.$this->page.'" style="width:25px;" /><input type="button" onclick="javascript:var page=(this.previousSibling.value>'.$this->total_pages.')?'.$this->total_pages.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'" value="GO" />&nbsp;';
        }
        private function page_list() {
            $link_page="";
            $i_num=floor($this->list_length/2);
            for ($i = $i_num; $i >= 1; $i--) {
                $page=$this->page-$i;
                if ($page<1) {
                    continue;
                }else{
                    $link_page.="&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";
                }
            }
            $link_page.="&nbsp;{$this->page}&nbsp;";
            for ($i = 1; $i < $i_num; $i++) {
                $page=$this->page+$i;
                if ($page<=$this->total_pages) {
                    $link_page.="&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";
                }else{
                    break;
                }
            }
            return $link_page;
        }
        public function out_page($display=array(0,1,2,3,4,5,6,7,8)) {
            $display_html='';
            $html[0]="&nbsp;共有<b>{$this->total_rows}</b>{$this->config['header']}&nbsp;";
            $html[1]="&nbsp;每頁顯示<b>".($this->end_page()-$this->start_page()+1)."</b>條,本頁顯示從<b>{$this->start_page()}</b>--<b>{$this->end_page()}</b>{$this->config['header']}&nbsp;";
            $html[2]="&nbsp;<b>{$this->page}</b>/<b>{$this->total_pages}</b>頁&nbsp;";
            $html[3]=$this->go_first();
            $html[4]=$this->go_prev();
            $html[5]=$this->page_list();
            $html[6]=$this->go_next();
            $html[7]=$this->go_last();
            $html[8]=$this->go_page();
            foreach ($display as $index){
                $display_html.=$html[$index];
            }
            return $display_html;
        }
    }
?>

page_demo.php

<?php
header("content-type:text/html;charset=utf-8");
require_once './page.class.php';
require_once '../config/config.db.php';
//數據庫中的總條數:total_rows;
//每一頁顯示的條數:per_page_rows
    $sql="select * from cp_sd_day";
    $rt=mysql_query($sql);
    $total_rows=mysql_num_rows($rt);
    $per_page_rows=10;

$page=new Page($total_rows,$per_page_rows);
$sql="select * from cp_sd_day {$page->limit}";
$rt=mysql_query($sql);
echo '<table width="1000" border="1">';
echo '<caption><h1>cp_sd_day</h1></caption>';
while (!!$row=mysql_fetch_assoc($rt)) {
    echo '<tr>';
        echo '<td>'.$row['date_no'].'</td>';
        echo '<td>'.$row['max_notwin'].'</td>';
        echo '<td>'.$row['sum_last_miss'].'</td>';
        echo '<td>'.$row['last_miss'].'</td>';
        echo '<td>'.$row['last_miss_sort'].'</td>';
    echo '</tr>';
}
echo '<tr><td colspan="5" align="right">'.$page->out_page(array(2,3,4,5,6,7,8)).'</td></tr>';
echo '</table>';

?></pre>


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!