php 分页类

分页公式:页数=(总记录数-1)/每页显示记录数+1;

借助这个公式,实现以下分页类;

<?php

    class Fpage{
        private $total; //数据表中总记录数
        private $listRows;    //每页显示的行数
        private $limit;
        private $uri;
        private $pageNum;    //行数
        private $config = array("header"=>"记录","pre"=>"上一页","next"=>"下一页","first"=>"首页",
                                "last"=>"尾页");
        
        public function __construct($total,$listRows=5){
            $this->total = $total;
            $this->listRows = $listRows;    
            $this->uri = $this->getUri();
            $this->page = !empty($_GET['page'])?$_GET['page']:1;
            $this->pageNum = ceil($this->total/$this->listRows);
            $this->limit = $this->setLimit();
        }
        
        private function setLimit(){
            return "Limit ".($this->page - 1)*$this->listRows.",{$this->listRows}";
        }
                
        private function getUri(){
            $url = $_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"],'?')?'':"?");    
            $parse = parse_url($url);
            
            if(isset($parse["query"])){
                parse_str($parse["query"],$params);
                unset($params['page']);
                $url = $parse['path'].'?'.http_build_query($params);
            }
            return $url;
        }
        
        public function __get($args){
            if($args == "limit"){
                return $this->limit;    
            }
            else{
                 return null;    
            }
        }
        
        private function start(){
            if($this->total == 0){
                return 0;    
            }
            else{
            return ($this->page - 1)*$this->listRows + 1;
            }
        }
        
        private function end(){
                return min($this->page*$this->listRows,$this->total);
        }
        
        private function first(){
            if($this->page == 1){
                $html .='';    
            }
            else{
                $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=1'>{$this->config['first']}</a>&nbsp;&nbsp;";    
            }
            return $html;
        }
        
        private function pre(){
            if($this->page == 1){
                $html .='';    
            }
            else{
                $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page-1)."'>{$this->config['pre']}</a>&nbsp;&nbsp;";    
            }
            return $html;
        }
        
        private function next(){
            if($this->page == $this->pageNum){
                $html .='';    
            }
            else{
                $html.="&nbsp;&nbsp;<a href='{$this->uri}&page=".($this->page+1)."'>{$this->config['next']}</a>&nbsp;&nbsp;";    
            }
            return $html;
        }
        
        private function last(){
            if($this->page == $this->pageNum){
                $html .='';    
            }
            else{
                $html.="&nbsp;&nbsp;<a href='{$this->uri}&page={$this->pageNum}'>{$this->config['last']}</a>&nbsp;&nbsp;";    
            }
            return $html;
        }
        
        private function pageList(){
            $pageLink = '';
            $inum = floor($this->pageNum/2);
            for($i=$inum;$i>=1;$i--){
                $page = $this->page-$i;
                if($page<1)continue;
                else{
                    $pageLink.="&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";    
                }
                }
            $pageLink.="&nbsp;{$this->page}&nbsp;";
            for($i=1;$i<$inum;$i++){
                $page = $this->page+$i;    
                if($page<=$this->pageNum){
                    $pageLink .= "&nbsp;<a href='{$this->uri}&page={$page}'>{$page}</a>&nbsp;";    
                }
                else break;
            }
            return $pageLink;
        }
        
        private function goPage(){
            return '&nbsp;&nbsp;<input type="text" onkeydown="javascript:if(event.keyCode == 13){var page=(this.value>'.$this->pageNum.')?'.$this->pageNum.':this.value;location=\''.$this->uri.'&page=\'+page+\'\'}" style="width:35" value='.$this->page.'><input type="button" value="GO" onclick="javascript:if(event.keyCode == 13){var page=(this.previousSibling.value>'.$this->pageNum.')?'.$this->pageNum.':this.previousSibling.value;location=\''.$this->uri.'&page=\'+page+\'\'}">&nbsp;&nbsp;';
            
        }
        
        public function fpage($display=array(0,1,2,3,4,5,6,7,8)){
            $html[0]= "&nbsp;&nbsp;共有<b>{$this->total}</b>条{$this->config['header']}&nbsp;&nbsp;";
            $html[1]= "&nbsp;&nbsp;每页显示<b>{$this->listRows}</b>条{$this->config['header']},
                    本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;&nbsp;";
            $html[2]="&nbsp;&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;&nbsp;";
            $html[3]=$this->first();
            $html[4]=$this->pre();
            $html[5]=$this->pageList();
            $html[6]=$this->next();
            $html[7]=$this->last();
            $html[8]=$this->goPage();
            
            foreach($display as $key){
                $Fpage.=$html[$key];
            }
            return $Fpage;    
        }
    }
?>

应用:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
    //自动加载函数类
    function __autoload($className){
        include strtolower($className).'.class.php';    
    }
    
    $link = mysql_connect("localhost","user","password") or die ("链接用户失败");
    @$db = mysql_select_db("dbname") or die("链接数据库失败");
    
    $result = mysql_query("select * from shops");
    $total = mysql_num_rows($result);
    
    $num = 5;
    
    $page = new Fpage($total,$num);
    $sql = "select * from shops {$page->limit}";
    $result = mysql_query($sql) or die ("操作错误");
    $cols = mysql_num_fields($result);
    
    echo "<table align='center' border='2' width='900'>";
    echo "<caption><h1>SHOPS</h1></caption>";
    
    echo '<tr>';
        for($i=0;$i<$cols;$i++){        
            echo '<th>'.mysql_field_name($result,$i).'</th>';
        }
    echo '</tr>';
        
    while($rows=mysql_fetch_assoc($result)){
        echo "<tr>";
        echo "<td>".$rows['id']."</td>";
        echo "<td>".$rows['name']."</td>";
        echo "<td>".$rows['dates']."</td>";
        echo "<td>".$rows['price']."</td>";
        echo "<td>".$rows['desnc']."</td>";
        echo "</tr>";
            
    }
    
    echo "<tr><td colspan='5' align='right'>".$page->fpage(array(3,4,5,6,7,8,0,1,2))."</td></tr>";
    echo "</table>";
?>

转载于:https://my.oschina.net/tianhuahua/blog/157194

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值