当前位置:编程学习 > php >>

php分页类好一点的谁有

答案:<? /* * 模式四种分页模式: 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 按钮的问题!

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,