php分页类

来源:互联网 发布:网页版淘宝旺旺无法 编辑:程序博客网 时间:2024/06/03 09:10


/** * 分页类 */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)}