转一个飞风的分页类

<?php
/*
 * Created on 2007-8-14
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */

/**
 * filename: Pagination
 * @package:phpbean
 * @author :feifengxlq<feifengxlq#gmail.com><[url=http://www.phpobject.net/]http://www.phpobject.net/[/url]>
 * @copyright :Copyright 2006 feifengxlq
 * @license:version 2.0
 * @create:2006-5-31
 * @modify:2006-6-1
 * @modify:feifengxlq 2006-11-4
 * description:超强分页类,四种分页模式,默认采用类似baidu,google的分页风格。
 * 2.0增加功能:支持自定义风格,自定义样式,同时支持PHP4和PHP5,
 * to see detail,please visit [url=http://www.phpobject.net/blog/read.php]http://www.phpobject.net/blog/read.php[/url]?
 * example:
 * 模式四种分页模式:
   require_once('../libs/classes/page.class.php');
   $page=new page(array('total'=>1000,'perpage'=>20));
   echo 'mode:1<br>'.$page->show();
   echo '<hr>mode:2<br>'.$page->show(2);
   echo '<hr>mode:3<br>'.$page->show(3);
   echo '<hr>mode:4<br>'.$page->show(4);
   开启AJAX:
   $ajaxpage=new page(array('total'=>1000,'perpage'=>20,'ajax'=>'ajax_page','page_name'=>'test'));
   echo 'mode:1<br>'.$ajaxpage->show();
   采用继承自定义分页显示模式:
   demo:http://www.phpobject.net/blog
 */
class Pagination {
    /**
     * config ,public
     */
    var $page_name = "PB_page"; //page标签,用来控制url页。比如说xxx.php?PB_page=2中的PB_page
    var $next_page = '>'; //下一页
    var $pre_page = '<'; //上一页
    var $first_page = 'First'; //首页
    var $last_page = 'Last'; //尾页
    var $pre_bar = '<<'; //上一分页条
    var $next_bar = '>>'; //下一分页条
    var $format_left = '[';
    var $format_right = ']';
    var $is_ajax = false; //是否支持AJAX分页模式

    /**
     * private
     *
     */
    var $pagebarnum = 10; //控制记录条的个数。
    var $totalpage = 0; //总页数
    var $ajax_action_name = ''; //AJAX动作名
    var $nowindex = 1; //当前页
    var $url = ""; //url地址头
    var $offset = 0;

    /**
     * constructor构造函数
     *
     * @param array $array['total'],$array['perpage'],$array['nowindex'],$array['url'],$array['ajax']...
     */
    function Pagination() {}
   
    function ini($array) {
        if (is_array($array)) {
            if (!array_key_exists('total', $array))
                $this->error(__FUNCTION__, 'need a param of total');
            $total = intval($array['total']);
            $perpage = (array_key_exists('perpage', $array)) ? intval($array['perpage']) : 10;
            $nowindex = (array_key_exists('nowindex', $array)) ? intval($array['nowindex']) : '';
            $url = (array_key_exists('url', $array)) ? $array['url'] : '';
        } else {
            $total = $array;
            $perpage = 10;
            $nowindex = '';
            $url = '';
        }
        if ((!is_int($total)) || ($total < 0))
            $this->error(__FUNCTION__, $total . ' is not a positive integer!');
        if ((!is_int($perpage)) || ($perpage <= 0))
            $this->error(__FUNCTION__, $perpage . ' is not a positive integer!');
        if (!empty ($array['page_name']))
            $this->set('page_name', $array['page_name']); //设置pagename
        $this->_set_nowindex($nowindex); //设置当前页
        $this->_set_url($url); //设置链接地址
        $this->totalpage = ceil($total / $perpage);
        $this->offset = ($this->nowindex - 1) * $this->perpage;
        if (!empty ($array['ajax']))
            $this->open_ajax($array['ajax']); //打开AJAX模式
    }
    /**
     * 设定类中指定变量名的值,如果改变量不属于这个类,将throw一个exception
     *
     * @param string $var
     * @param string $value
     */
    function set($var, $value) {
        if (in_array($var, get_object_vars($this)))
            $this-> $var = $value;
        else {
            $this->error(__FUNCTION__, $var . " does not belong to PB_Page!");
        }

    }
    /**
     * 打开倒AJAX模式
     *
     * @param string $action 默认ajax触发的动作。
     */
    function open_ajax($action) {
        $this->is_ajax = true;
        $this->ajax_action_name = $action;
    }
    /**
     * 获取显示"下一页"的代码
     *
     * @param string $style
     * @return string
     */
    function next_page($style = '') {
        if ($this->nowindex < $this->totalpage) {
            return $this->_get_link($this->_get_url($this->nowindex + 1), $this->next_page, $style);
        }
        return '<span class="' . $style . '">' . $this->next_page . '</span>';
    }

    /**
     * 获取显示“上一页”的代码
     *
     * @param string $style
     * @return string
     */
    function pre_page($style = '') {
        if ($this->nowindex > 1) {
            return $this->_get_link($this->_get_url($this->nowindex - 1), $this->pre_page, $style);
        }
        return '<span class="' . $style . '">' . $this->pre_page . '</span>';
    }

    /**
     * 获取显示“首页”的代码
     *
     * @return string
     */
    function first_page($style = '') {
        if ($this->nowindex == 1) {
            return '<span class="' . $style . '">' . $this->first_page . '</span>';
        }
        return $this->_get_link($this->_get_url(1), $this->first_page, $style);
    }

    /**
     * 获取显示“尾页”的代码
     *
     * @return string
     */
    function last_page($style = '') {
        if ($this->nowindex == $this->totalpage) {
            return '<span class="' . $style . '">' . $this->last_page . '</span>';
        }
        return $this->_get_link($this->_get_url($this->totalpage), $this->last_page, $style);
    }

    function nowbar($style = '', $nowindex_style = '') {
        $plus = ceil($this->pagebarnum / 2);
        if ($this->pagebarnum - $plus + $this->nowindex > $this->totalpage)
            $plus = ($this->pagebarnum - $this->totalpage + $this->nowindex);
        $begin = $this->nowindex - $plus +1;
        $begin = ($begin >= 1) ? $begin : 1;
        $return = '';
        for ($i = $begin; $i < $begin + $this->pagebarnum; $i++) {
            if ($i <= $this->totalpage) {
                if ($i != $this->nowindex)
                    $return .= $this->_get_text($this->_get_link($this->_get_url($i), $i, $style));
                else
                    $return .= $this->_get_text('<span class="' .
                    $nowindex_style . '">' . $i . '</span>');
            } else {
                break;
            }
            $return .= "/n";
        }
        unset ($begin);
        return $return;
    }
    /**
     * 获取显示跳转按钮的代码
     *
     * @return string
     */
    function select() {
        $return = '<select name="PB_Page_Select" >';
        for ($i = 1; $i <= $this->totalpage; $i++) {
            if ($i == $this->nowindex) {
                $return .= '<option value="' . $i . '" selected>' . $i . '</option>';
            } else {
                $return .= '<option value="' . $i . '">' . $i . '</option>';
            }
        }
        unset ($i);
        $return .= '</select>';
        return $return;
    }

    /**
     * 获取mysql 语句中limit需要的值
     *
     * @return string
     */
    function offset() {
        return $this->offset;
    }

    /**
     * 控制分页显示风格(你可以增加相应的风格)
     *
     * @param int $mode
     * @return string
     */
    function show($mode = 1) {
        switch ($mode) {
            case '1' :
                $this->next_page = '下一页';
                $this->pre_page = '上一页';
                return $this->pre_page() . $this->nowbar() . $this->next_page() . '第' . $this->select() . '页';
                break;
            case '2' :
                $this->next_page = '下一页';
                $this->pre_page = '上一页';
                $this->first_page = '首页';
                $this->last_page = '尾页';
                return $this->first_page() . $this->pre_page() . '[第' . $this->nowindex . '页]' . $this->next_page() . $this->last_page() . '第' . $this->select() . '页';
                break;
            case '3' :
                $this->next_page = '下一页';
                $this->pre_page = '上一页';
                $this->first_page = '首页';
                $this->last_page = '尾页';
                return $this->first_page() . $this->pre_page() . $this->next_page() . $this->last_page();
                break;
            case '4' :
                $this->next_page = '下一页';
                $this->pre_page = '上一页';
                return $this->pre_page() . $this->nowbar() . $this->next_page();
                break;
            case '5' :
                return $this->pre_bar() . $this->pre_page() . $this->nowbar() . $this->next_page() . $this->next_bar();
                break;
        }

    }
    /*----------------private function (私有方法)-----------------------------------------------------------*/
    /**
     * 设置url头地址
     * @param: String $url
     * @return boolean
     */
    function _set_url($url = "") {
        if (!empty ($url)) {
            //手动设置
            $this->url = $url . ((stristr($url, '?')) ? '&' : '?') . $this->page_name . "=";
        } else {
            //自动获取
            if (empty ($_SERVER['QUERY_STRING'])) {
                //不存在QUERY_STRING时
                $this->url = $_SERVER['REQUEST_URI'] . "?" . $this->page_name . "=";
            } else {
                //
                if (stristr($_SERVER['QUERY_STRING'], $this->page_name . '=')) {
                    //地址存在页面参数
                    $this->url = str_replace($this->page_name . '=' . $this->nowindex, '', $_SERVER['REQUEST_URI']);
                    $last = $this->url[strlen($this->url) - 1];
                    if ($last == '?' || $last == '&') {
                        $this->url .= $this->page_name . "=";
                    } else {
                        $this->url .= '&' . $this->page_name . "=";
                    }
                } else {
                    //
                    $this->url = $_SERVER['REQUEST_URI'] . '&' . $this->page_name . '=';
                } //end if   
            } //end if
        } //end if
    }

    /**
     * 设置当前页面
     *
     */
    function _set_nowindex($nowindex) {
        if (empty ($nowindex)) {
            //系统获取

            if (isset ($_GET[$this->page_name])) {
                $this->nowindex = intval($_GET[$this->page_name]);
            }
        } else {
            //手动设置
            $this->nowindex = intval($nowindex);
        }
    }

    /**
     * 为指定的页面返回地址值
     *
     * @param int $pageno
     * @return string $url
     */
    function _get_url($pageno = 1) {
        return $this->url . $pageno;
    }

    /**
     * 获取分页显示文字,比如说默认情况下_get_text('<a href="">1</a>')将返回[<a href="">1</a>]
     *
     * @param String $str
     * @return string $url
     */
    function _get_text($str) {
        return $this->format_left . $str . $this->format_right;
    }

    /**
      * 获取链接地址
    */
    function _get_link($url, $text, $style = '') {
        $style = (empty ($style)) ? '' : 'class="' . $style . '"';
        if ($this->is_ajax) {
            //如果是使用AJAX模式
            return '<a ' . $style . ' href="javascript:' . $this->ajax_action_name . '(/'' . $url . '/')">' . $text . '</a>';
        } else {
            return '<a ' . $style . ' href="' . $url . '">' . $text . '</a>';
        }
    }
    /**
      * 出错处理方式
    */
    function error($function, $errormsg) {
        die('Error in file <b>' . __FILE__ . '</b> ,Function <b>' . $function . '()</b> :' . $errormsg);
    }
}
?>
 

实现类


<?php
/*
 * Created on 2007-8-14
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 require_once __INCLUDE_DIR_ . "Pagination.php";
 
 /**
  * 后台 分页样式
  */
 class AdminPagination extends Pagination {
    
     var $page_name = "p";
    
     function AdminPagination() {}
    
    function iniPage($array)
    {
        $this->ini($array);
        $this->first_page=1;
        $this->last_page=$this->totalpage;
        $this->set('format_left','');
        $this->set('format_right','');
    }
 
    function show()
    {
        $pagestr='<div class="pagenavi" id="lopage">页:';
        $pagestr.=$this->first_page().' ';
        $pagestr.=$this->nowbar('','curr');
        $pagestr.='<span class="break">...</span>';
        $pagestr.=$this->last_page();
        $pagestr.='   (总计<span class="num">'.$this->totalpage.'</span>页) </div>';
        $pagestr.='</div>';
        return $pagestr;
    }
   
    /**
     * 设置分页样式
     */
    function setLayout()
    {
        return '<style type="text/css">
<!--
.pagenavi { text-align:center;  font: 11px Arial, tahoma, sans-serif; padding-top: 20px; padding-bottom: 10px; margin: 0px; }
.pagenavi a {border: 1px solid #E2F1AF; background: #FFFFFF; text-decoration: none; color:#C16012; display:inline-block; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px}
.pagenavi a:visited {border: 1px solid #E2F1AF; background: #FFFFFF; text-decoration: none; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px}
.pagenavi .break {border: medium none;  text-decoration: none; color:#C16012; background:;; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px}
.pagenavi .num {color:#C16012; font-size:12pt; padding-left:3px; padding-right:3px; padding-top:0; padding-bottom:0}
.pagenavi .curr {padding: 2px 6px; border-color: #999; font-weight: bold; font-size:12pt; background:transparent;}
.pagenavi a:hover {color: #C16012; background: #E2F1AF; text-decoration: none}
-->
</style>';
    }
 }
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值