答案:<?
/*
* 模式四种分页模式:
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();
采用继承自定义分页显示模式:
*/
class page {
/**
* config ,public
*/
var $page_name = "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分页模式
var $is_rewrite = true;//是否启动url重写分页模式
var $totalcount = 0;
var $nowpage ;
var $perpage = 0;
/**
* 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 page($array) {
if(is_array($array)) {
if(!array_key_exists('total',$array))
$this->error(__FUNCTION__,'need a param of total');
$this->totalcount = $total = intval($array['total']);
$perpage = (array_key_exists('perpage',$array)) ? intval($array['perpage']):10;
$this->nowpage = $nowindex = (array_key_exists('nowindex',$array)) ? intval($array['nowindex']):'';
$url = (array_key_exists('url',$array)) ? $array['url'] : '';
} else {
$total = 0;
$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->perpage = $perpage;
$cont = $total / $perpage;
$cont2 = $total % $perpage;
if( $cont > 1 && $cont2 == 0 ) {
$this->totalpage = floor($cont);
}
elseif( $cont2 > 0) {
$this->totalpage = floor($cont)+1;
}
$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 id="PB_Page_Select" onChange="window.location.href = \''.$this->url.'\'+this.value;" >';
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) {
$str = "共 {$this->totalcount} 条记录 ";
if($this->nowpage > 0)
$str .= " 第{$this->nowpage}/{$this->totalpage}页 ";
switch ($mode){
case '1':
$this->next_page = '下一页';
$this->pre_page = '上一页';
return $str . $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 $str . $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 $str . $this->first_page().' '.$this->pre_page().' '.$this->next_page().' '.$this->last_page();
break;
case '4':
$this->next_page = '下一页';
$this->pre_page = '上一页';
return $str . $this->pre_page().$this->nowbar().$this->next_page();
break;
case '5':
return $str . $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($_SERVE
其他:<? //为了避免重复包含文件而造成错误,加了判断函数是否存在的条件: if(!function_exists(pageft)){ //定义函数pageft(),三个参数的含义为: //$totle:信息总数; //$displaypg:每页显示信息数,这里设置为默认是20; //$url:分页导航中的链接,除了加入不同的查询信息“page”外的部分都与这个URL相同。 // 默认值本该设为本页URL(即$_SERVER["REQUEST_URI"]),但设置默认值的右边只能为常量,所以该默认值设为空字符串,在函数内部再设置为本页URL。 function pageft($totle,$displaypg=20,$url=''){ //定义几个全局变量: //$page:当前页码; //$firstcount:(数据库)查询的起始项; //$pagenav:页面导航条代码,函数内部并没有将它输出; //$_SERVER:读取本页URL“$_SERVER["REQUEST_URI"]”所必须。 global $page,$firstcount,$pagenav,$_SERVER; //为使函数外部可以访问这里的“$displaypg”,将它也设为全局变量。注意一个变量重新定义为全局变量后,原值被覆盖,所以这里给它重新赋值。 $GLOBALS["displaypg"]=$displaypg; if(!$page) $page=1; //如果$url使用默认,即空值,则赋值为本页URL: if(!$url){ $url=$_SERVER["REQUEST_URI"];} //URL分析: $parse_url=parse_url($url); $url_query=$parse_url["query"]; //单独取出URL的查询字串 if($url_query){ //因为URL中可能包含了页码信息,我们要把它去掉,以便加入新的页码信息。 //这里用到了正则表达式,请参考“PHP中的正规表达式”(http://www.pconline.com.cn/pcedu/empolder/wz/php/10111/15058.html) $url_query=ereg_replace("(^|&)page=$page","",$url_query); //将处理后的URL的查询字串替换原来的URL的查询字串: $url=str_replace($parse_url["query"],$url_query,$url); //在URL后加page查询信息,但待赋值: if($url_query) $url.="&page"; else $url.="page"; }else { $url.="?page"; } //页码计算: $lastpg=ceil($totle/$displaypg); //最后页,也是总页数 $page=min($lastpg,$page); $prepg=$page-1; //上一页 $nextpg=($page==$lastpg ? 0 : $page+1); //下一页 $firstcount=($page-1)*$displaypg; //开始分页导航条代码: $pagenav="显示第 <B>".($totle?($firstcount+1):0)."</B>-<B>".min($firstcount+$displaypg,$totle)."</B> 条记录,共 $totle 条记录"; //如果只有一页则跳出函数: if($lastpg<=1) return false; $pagenav.=" <a href='$url=1'>首页</a> "; if($prepg) $pagenav.=" <a href='$url=$prepg'>前页</a> "; else $pagenav.=" <a >前页</a> "; if($nextpg) $pagenav.=" <a href='$url=$nextpg'>后页</a> "; else $pagenav.=" <a >后页</a> "; $pagenav.=" <a href='$url=$lastpg'>尾页</a> "; //下拉跳转列表,循环列出所有页码: $pagenav.=" 到第 <select name='topage' size='1' onchange='window.location=\"$url=\"+this.value'>\n"; for($i=1;$i<=$lastpg;$i++){ if($i==$page) $pagenav.="<option value='$i' selected>$i</option>\n"; else $pagenav.="<option value='$i'>$i</option>\n"; } $pagenav.="</select> 页,共 $lastpg 页"; } } ?>
上一个:PHP 代码问题
下一个:php 按钮的问题!