<?php
/**
  +--------------------------------------------
  php分页类  
  创建时间 2010.11.12 
  
  
  使用方法:
  
  $page = new Pages(
                    此处传递必须参数 数据总数,
                    以下为可选参数可以不写 依次为:
$每页展示数量默认10,
$分页样式,
$是否自动写入分页样式 1 代表自动]
);
  
  
  $p1->firstpage(); //首页展示方法  |  $p1->prepage();   //上一页展示
  $p1->nextpage();  //下一页        |  $p1->lastpage();  //最后一页
  $p1->skip_page(); //跳转页        |  $p1->more_page(); //中间过渡页
  
  ** 
   $p1->limit 为一个数组 $limit['a']  是sql 语句limit 所需的前面的数值 $limit['b'] 是后面的值
    可以通过对象直接访问获得
  **
  +--------------------------------------------
**/
class Pages{ private $total_rows;                //数据总数

private $every_page_show    = 10;   //每一页展示数量

private $curren_pagename;           //当前页面名称

public  $limit;                     //以数组的形式返回 sql 语句必须的limit值 $limit[a] - 代表前面的值 $limit[b] - 代表后面的值

private $total_pages;               //页码总数

//style 代表了分页的样式
private $style = '<style>
.pages_norame {display:bolck; width:auto; height:20px; float:left; padding-left:5px; padding-right:5px; font-family:Arial, Helvetica, sans-serif; font-size:12px; border-top:1px solid #999; border-left:1px solid #999; border-bottom:1px solid #CCC; border-right:1px solid #CCC; line-height:20px; text-decoration:none; margin-right:6px; color:#666;}
.pages_norame:hover{background-color:#F0F4F6; color:#000;}
.pages_select_nename{font-family:Arial, Helvetica, sans-serif; font-size:12px; float:left;}
.pages_bold{font-weight:bold; background-color:#F0F4F6;}
</style>';

/* 分页语言定义 公有类型 可以在对象的基础上访问进行修饰 */

public $lang = array('FirstPage'    =>  '首页',
                      'PrePage'      =>  '上一页',
  'NextPage'     =>  '下一页',
  'LastPage'     =>  '尾页'
  );
   /* 定义url参数的保持变量 */

private $url_get;


/* 
类的函数定义

1 构造函数
*/
function pages($total_rows,$every_page_show=10,$style='default',$style_auto_print=1){

$this->total_rows       = $total_rows;
$this->every_page_show  = $every_page_show;

/* 分页样式更改设置 */
if($style != 'default'){
$this->style = $style;
}

/* 计算总计页码数 */

$this->total_pages = ceil($this->total_rows/$this->every_page_show);

/* 检查当前页码不能小于1 不能大于 最大页码 */

if(!isset($_GET['pages_id'])){
$_GET['pages_id'] = 1;
}else{
$_GET['pages_id'] = intval($_GET['pages_id']);
}

if($_GET['pages_id'] < 1){
$_GET['pages_id'] = 1;
}

if($_GET['pages_id'] > $this->total_pages){
$_GET['pages_id'] = $this->total_pages;
}

/* 计算sql 语句必须的2个数值 */

$this->limit['a'] = ($_GET['pages_id']-1)*$this->every_page_show;
$this->limit['b'] = $this->every_page_show;

/* 获得调用本类的页面名称 */

$page_arr = explode('/',$_SERVER['PHP_SELF']);
$this->curren_pagename = end($page_arr);

/* 获得页面的url参数并保持到页码 */

if(count($_GET) >= 1){

foreach($_GET as $key=>$values){
if($key !== 'pages_id'){
$this->url_get .= '&'.$key.'='.$values;
}
}
}

/* 根据参数 $style_auto_print 自动输出样式 */
if($style_auto_print == 1){
$this->style_write();
}
}


/**
+-------------------------------------------------
以下代码使用方法直接输出页面展示 
包含样式的输出
+-------------------------------------------------
**/

/* 定义首页展示方法 */

function style_write(){
echo $this->style;
}

function firstpage(){
echo '<a href="'.$this->curren_pagename.'?pages_id=1'.$this->url_get.'" class="pages_norame">'.$this->lang['FirstPage'].'</a>';
}

/* 定义上一页展示方法 */

function prepage(){
echo '<a href="'.$this->curren_pagename.'?pages_id='.($_GET['pages_id']-1).$this->url_get.'" class="pages_norame">'.$this->lang['PrePage'].'</a>';
}

/* 定义下一页展示方法 */

function nextpage(){
echo '<a href="'.$this->curren_pagename.'?pages_id='.($_GET['pages_id']+1).$this->url_get.'" class="pages_norame">'.$this->lang['NextPage'].'</a>';
}

/* 定义尾页展示方法 */

function lastpage(){
echo '<a href="'.$this->curren_pagename.'?pages_id='.$this->total_pages.$this->url_get.'" class="pages_norame">'.$this->lang['LastPage'].'</a>';
}

/*  定义跳转方法 */

function skip_page(){
echo '
<script>
function skip_pages_norename(pid){
location.href="'.$this->curren_pagename.'?pages_id="+pid+"'.$this->url_get.'";
}
</script>
<select class="pages_select_nename" onchange="skip_pages_norename(this.value)">
';
for($i = 1; $i <= $this->total_pages; $i++){

echo '<option value="'.$i.'"';
if($i == $_GET['pages_id']){echo ' selected="selected"';}
echo '>第'.$i.'页</option>
';
}
echo '</select>';
}

/* 中间过渡页方法 */

function more_page(){

//当前页前3页展示

$i = $_GET['pages_id']-3;
if($i < 1){$i = 1;}
for($i; $i > 0; $i++){
if($i >= $_GET['pages_id']){break;}
echo '<a href="'.$this->curren_pagename.'?pages_id='.$i.$this->url_get.'" class="pages_norame">'.$i.'</a>
';
}

//展示当前页
echo '<a href="'.$this->curren_pagename.'?pages_id='.$_GET['pages_id'].$this->url_get.'" class="pages_norame pages_bold">'.$_GET['pages_id'].'</a>
';
//展示当前页的后6页
if($_GET['pages_id'] <= 3){
$sets = 10-$_GET['pages_id'];
}else{
$sets = 6;
}
for($i = $_GET['pages_id']+1; $i <= ($_GET['pages_id']+$sets); $i++){
if($i > $this->total_pages){break;}
echo '<a href="'.$this->curren_pagename.'?pages_id='.$i.$this->url_get.'" class="pages_norame">'.$i.'</a>
';
}
}
/*  class end */
}
?>