php分页类


/**
 * 分页类
 */
class Page{

    private $page_items_nums;       // 每页显示的数据个数    
    private $nums;                  // 数据总数     
    private $current_page;          // 当前页     
    private $sub_pages;             // 页面显示的页数个数(如 1 2 3 4 5显示5个)
    private $total_page_nums;       // 总页数     
    private $page_array = array();  // 用来构造分页的数组     
    private $page_link;             // 分页链接     
    private $page_link_type;        // 分页链接样式  1(example:共45条记录,每页显示10条,当前第1/45页 [首页] [上页] [下页] [尾页]) 2(example:当前第1/45页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]) 

    function __construct() {}
    
    function __destruct() {
        unset($this->page_items_nums);
        unset($this->nums);
        unset($this->current_page);
        unset($this->sub_pages);
        unset($this->total_page_nums);
        unset($this->page_array);
        unset($this->page_link);
        unset($this->page_link_type);
    }

    
    /**
     * 初始化分页类
     * @param int       $page_items_nums    每页显示的数据个数
     * @param int       $nums               数据总数
     * @param int       $current_page       当前页
     * @param int       $sub_pages          页面显示的页数个数(如 1 2 3 4 5显示5个)
     * @param string    $page_link          分页链接
     * @param int       $page_link_type     分页链接样式  1(example:共45条记录,每页显示10条,当前第1/45页 [首页] [上页] [下页] [尾页]) 2(example:当前第1/45页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]) 
     * @return type 
     */
    public function initinfo($page_items_nums, $nums, $current_page, $sub_pages, $page_link, $page_link_type){
        $this->page_items_nums = intval($page_items_nums);
        $this->nums = intval($nums);
        // 设置当前页
        if (!$current_page) {
            $this->current_page = 1;
        } else {
            $this->current_page = intval($current_page);
        }
        $this->sub_pages = intval($sub_pages);
        // 计算总页数
        $this->total_page_nums = ceil($nums / $page_items_nums);
        $this->page_link = $page_link;
        return $this->show_pages($page_link_type);
    }

    
    /**
     * 选择分页样式
     * @param int $page_link_type 分页链接样式
     * @return type 
     */
    function show_pages($page_link_type) {
        if ($page_link_type == 1) {
            return $this->page_css_1();
        } else if ($page_link_type == 2) {
            return $this->page_css_2();
        } else if($page_link_type == 3){
            return $this->page_css_3();
        }
    }


    /**
     * 用来给建立分页的数组初始化的函数
     * @return type 
     */
    function initArray() {
        for ($i = 0; $i < $this->sub_pages; $i++) {
            $this->page_array[$i] = $i;
        }
        return $this->page_array;
    }

    
    /**
     * 构造显示的页数 如 1 2 3 4 5
     * @return type 
     */
    function construct_num_Page() {
        if ($this->total_page_nums < $this->sub_pages) {
            $current_array = array();
            for ($i = 0; $i < $this->total_page_nums; $i++) {
                $current_array[$i] = $i + 1;
            }
        } else {
            $current_array = $this->initArray();
            if ($this->current_page <= 3) {
                for ($i = 0; $i < count($current_array); $i++) {
                    $current_array[$i] = $i + 1;
                }
            } else if ($this->current_page <= $this->total_page_nums && $this->current_page > $this->total_page_nums - $this->sub_pages + 1) {
                for ($i = 0; $i < count($current_array); $i++) {
                    $current_array[$i] = ($this->total_page_nums) - ($this->sub_pages) + 1 + $i;
                }
            } else {
                for ($i = 0; $i < count($current_array); $i++) {
                    $current_array[$i] = $this->current_page - 2 + $i;
                }
            }
        }
        return $current_array;
    }

    /**
     * 构造普通模式的分页     共45条记录,每页显示10条,当前第1/45页 [首页] [上页] [下页] [尾页]
     */
    function page_css_1() {
        $subPageCss1Str = "";
        $subPageCss1Str.="共" . $this->nums . "条记录,";
        $subPageCss1Str.="每页显示" . $this->page_items_nums . "条,";
        $subPageCss1Str.="当前第" . $this->current_page . "/" . $this->total_page_nums . "页 ";
        if ($this->current_page > 1) {
            $firstPageUrl = $this->page_link . "1";
            $prewPageUrl = $this->page_link . ($this->current_page - 1);
            $subPageCss1Str.="[<a href='$firstPageUrl'>首页</a>] ";
            $subPageCss1Str.="[<a href='$prewPageUrl'>上一页</a>] ";
        } else {
            $subPageCss1Str.="[首页] ";
            $subPageCss1Str.="[上一页] ";
        }
        if ($this->current_page < $this->total_page_nums) {
            $lastPageUrl = $this->page_link . $this->total_page_nums;
            $nextPageUrl = $this->page_link . ($this->current_page + 1);
            $subPageCss1Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
            $subPageCss1Str.="[<a href='$lastPageUrl'>尾页</a>] ";
        } else {
            $subPageCss1Str.="[下一页] ";
            $subPageCss1Str.="[尾页] ";
        }
        echo $subPageCss1Str;
    }


    /**
     * 构造经典模式的分页(js交互)     当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]  
     * @return string 
     */
    function page_css_2() {
        $subPageCss2Str = "";
        $subPageCss2Str.="当前第" . $this->current_page . "/" . $this->total_page_nums . "页 ";
        if ($this->current_page > 1) {
            $firstPageUrl = $this->page_link . "1";
            $prewPageUrl = $this->page_link . ($this->current_page - 1);
            $prenum = $this->current_page - 1;
            $subPageCss2Str.="[<span style='cursor:pointer' name='1'>首页</span>] ";
            $subPageCss2Str.="[<span style='cursor:pointer' name='$prenum'>上一页</span>] ";
        } else {
            $subPageCss2Str.="[首页] ";
            $subPageCss2Str.="[上一页] ";
        }
        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss2Str.="[<b style='color:red;font-weight:bold;'>" . $s . "</b>]";
            } else {
                $url = $this->page_link . $s;
                $subPageCss2Str.="[<span style='cursor:pointer' name='$s'>" . $s . "</span>]";
            }
        }
        if ($this->current_page < $this->total_page_nums) {
            $lastPageUrl = $this->page_link . $this->total_page_nums;
            $nextPageUrl = $this->page_link . ($this->current_page + 1);
            $nextnum = $this->current_page + 1;
            $subPageCss2Str.=" [<span style='cursor:pointer' name='$nextnum'>下一页</span>] ";
            $subPageCss2Str.="[<span style='cursor:pointer' name='$this->total_page_nums'>尾页</span>] ";
        } else {
            $subPageCss2Str.="[下一页] ";
            $subPageCss2Str.="[尾页] ";
        }
        return $subPageCss2Str;
    }
    
    
    /**
     * 构造经典模式的分页(url交互)     当前第1/45页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]  
     * @return string 
     */
    function page_css_3() {
        $subPageCss3Str = "";
        $subPageCss3Str.="当前第" . $this->current_page . "/" . $this->total_page_nums . "页 ";
        if ($this->current_page > 1) {
            $firstPageUrl = $this->page_link . "1";
            $prewPageUrl = $this->page_link . ($this->current_page - 1);
            $subPageCss3Str.="[<a href='$firstPageUrl'>首页</a>] ";
            $subPageCss3Str.="[<a href='$prewPageUrl'>上一页</a>] ";
        } else {
            $subPageCss3Str.="[首页] ";
            $subPageCss3Str.="[上一页] ";
        }
        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss3Str.="[<span style='color:red;font-weight:bold;'>" . $s . "</span>]";
            } else {
                $url = $this->page_link . $s;
                $subPageCss3Str.="[<a href='$url'>" . $s . "</a>]";
            }
        }
        if ($this->current_page < $this->total_page_nums) {
            $lastPageUrl = $this->page_link . $this->total_page_nums;
            $nextPageUrl = $this->page_link . ($this->current_page + 1);
            $subPageCss3Str.=" [<a href='$nextPageUrl'>下一页</a>] ";
            $subPageCss3Str.="[<a href='$lastPageUrl'>尾页</a>] ";
        } else {
            $subPageCss3Str.="[下一页] ";
            $subPageCss3Str.="[尾页] ";
        }
        return $subPageCss3Str;
    }

    // 可根据自己的需求再建立 page_css_*
}


function test()
{
    // 分页设置
    $pageclass = new Page();
    // 每页显示数目
    $size = 10;
    // 总条目数
    $nums = count();
    // 得到当前是第几页     
    $pageCurrent = $p;
    // 分页链接显示的页数     
    $sub_pages = 5;
    // url 参数p一定要在最后
    $url = './list.php?size='.$size.'&p=';
    // 获取分页链接
    $page_link = $pageclass->initinfo($size, $nums, $pageCurrent, $sub_pages, $url, 4);

    // 获取数据
    //$data = ...;

    return array('data'=>$data,'page_link'=>$page_link)
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值