PHP实现仿Google分页效果的分页函数


本文实例讲述了PHP实现仿Google分页效果的分页函数。分享给大家供大家参考。具体如下:

/**
 * 分页函数
 * @param int $total  总页数
 * @param int $pagesize 每页几条
 * @param string $pkey url中页面变量名称
 * @param string $url  基础url,其中的{page}会被替换为页码
 * 依赖函数 request_uri httpInt
 */
function page($total,$pagesize=10,$pkey='p',$url=null){
  $a_num=10;
  $first=' 首页 ';
  $last=' 尾页 ';
  $pre=' 上页 ';
  $next=' 下页 ';
  $a_num=$a_num%2==0?$a_num+1:$a_num;
  if(!$url){
    $url=preg_replace("/&?{$pkey}=[^&]{0,}/", '',request_uri());
    $url=strpos($url, '?')===FALSE?$url.'?'.$pkey.'={page}':$url.'&'.$pkey.'={page}';
  }
  $pages=ceil($total/$pagesize);
  $curpage=httpInt($pkey,false,1);
  $curpage=$curpage>$pages||$curpage<=0?1:$curpage;//当前页超范围置为1
  $body='';$prefix='';$subfix='';
  $start=$curpage-($a_num-1)/2;//开始页
  $end=$curpage+($a_num-1)/2; //结束页
  $start=$start<=0?1:$start;  //开始页超范围修正
  $end=$end>$pages?$pages:$end;//结束页超范围修正
  if($pages>=$a_num){//总页数大于显示页数
    if($curpage<=($a_num-1)/2){$end=$a_num;}//当前页在左半边补右边
    if($end-$curpage<=($a_num-1)/2){$start-=5-($end-$curpage);}//当前页在右半边补左边
  }
  for($i=$start;$i<=$end;$i++){
     if($i==$curpage){
       $body.='<b>'.$i.'</b>';
     }else{
       $body.='<a href="'.str_replace('{page}',$i,$url).'"> '.$i.' </a>';
     }
  }
  $prefix=($curpage==1?'':'<a href="'.str_replace('{page}',1,$url).'">'.$first.'</a><a href="'.str_replace('{page}',$curpage-1,$url).'">'.$pre.'</a>');
  $subfix=($curpage==$pages?'':'<a href="'.str_replace('{page}',$curpage+1,$url).'">'.$next.'</a><a href="'.str_replace('{page}',$pages,$url).'">'.$last.'</a>');
  $info=" 第{$curpage}/{$pages}页 ";
  $go='<script>function ekup(){if(event.keyCode==13){clkyup();}}function clkyup(){if(!/\d+/.test(document.getElementById(\'gsd09fhas9d\').value)){alert(\'请输入页码!\');return;};location=\''.$url.'\'.replace(/\\{page\\}/,document.getElementById(\'gsd09fhas9d\').value);}</script><input onkeyup="ekup()" type="text" id="gsd09fhas9d" style="width:40px;vertical-align:text-baseline;padding:0 2px;font-size:10px;border:1px solid gray;"/> <span id="gsd09fhas9daa" onclick="clkyup();" style="cursor:pointer;text-decoration:underline;">转到</span>';
  return $prefix.$body.$subfix.$info.$go;
}
/**
 * 说明:获取 _SERVER['REQUEST_URI'] 值的通用解决方案
 */
function request_uri()
{
  if (isset($_SERVER['REQUEST_URI']))
  {
    $uri = $_SERVER['REQUEST_URI'];
  }
  else
  {
    if (isset($_SERVER['argv']))
    {
      $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['argv'][0];
    }
    else
    {
      $uri = $_SERVER['PHP_SELF'] .'?'. $_SERVER['QUERY_STRING'];
    }
  }
  return $uri;
}
/**
 * 获取HTTP传递的整数
 * @param string $key 参数名称
 * @param bool $ispost 采取POST传递方式,默认为真http://blog.ddian.cn
 * @return 整数,非法时默认为 $default
 */
 function httpInt($key, $ispost=true,$default=0) {
   if ($ispost) {
     if (isset($_POST[$key])) {
       if (empty($_POST[$key])) {
         return $default;
       } else {
         $val = trim($_POST[$key]);
         if (preg_match("/^\-?\d+$/", $val)) return intval($val);
         else return $default;
       }
     } else {
       return $default;
     }
   } else {
     if (isset($_GET[$key])) {
       if (empty($_GET[$key])) {
         return $default;
       } else {
         $val = trim($_GET[$key]);
         if (preg_match("/^\-?\d+$/", $val)) {
           return intval($val);
         } else {
           return $default;
         }
       }
     } else {
       return $default;
     }
   }
}

希望本文所述对大家的php程序设计有所帮助。



相关阅读:
iOS模仿电子书首页实现书架布局样式
JS实现仿QQ面板的手风琴效果折叠菜单代码
PHP自带方法验证邮箱是否存在
PHP正则表达式过滤html标签属性(DEMO)
jquery ajax结合thinkphp的getjson实现跨域的方法
ThinkPHP使用心得分享-分页类Page的用法
如何调试异步加载页面里包含的js文件
JavaScript编程中实现对象封装特性的实例讲解
JavaScript获取图片像素颜色并转换为box-shadow显示
QuiteRSS: Linux桌面的RSS阅读器 你值得拥有
C#数据绑定(DataBinding)简单实现方法
css教程制作css圆角边框(兼容全部浏览器)
如何解决PHP使用mysql_query查询超大结果集超内存问题
jQuery插件开发的两种方法及$.fn.extend的详解
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 乐山联运汽车站 龙游路东段526
中共昭平县汽车总站支部委员会 广西壮族自治区贺州市昭平县
白市汽车客运站 四川省广安市广安区
河西正德客运站 西厚路
增城福和车站 福和镇
叶集汽车客运站 安徽省六安市霍邱县
临沂汽车站候车厅 山东省临沂市兰山区
化峒客运站 广西壮族自治区百色市靖西县
胜观客运站 四川省南充市高坪区
中山铺客运站 河南省信阳市平桥区
洛宁涧口客运站 河南省洛阳市洛宁县
福州公路客运配客站 连江北路160号
茂名汽车总站 油城三路
楚雄汽车东客运站 雄宝路354
小拐乡客运站 新疆维吾尔自治区克拉玛依市克拉玛依区
扶余公路客运总站 通达街
太谷汽车站 山西省晋中市太谷县
黄骅汽车站 津盐大街
杭州楼塔汽车站 浙江省杭州市萧山区
城东汽车站粤运快件 端州三路13号
龙凤山风景名胜区客运站 黑龙江省哈尔滨市五常市
馆陶县城乡客运站 河北省邯郸市馆陶县
特运集团长途汽车站湖里街售票处 湖里街8号
海门大千汽车站 人民西路927
故城郑口汽车站 河北省衡水市故城县
宁阳汽车站 山东省泰安市宁阳县
周村客运中心 山东省淄博市周村区
新沂市时集客运站 江苏省徐州市新沂市
新密大隗客运站 河南省郑州市新密市
泊头西辛店客运站 二八一省道
舟山汽车客运中心 浙江省.舟山市定海区环城南路15号6楼
帽儿山客运站 黑龙江省哈尔滨市尚志市
昆明汽车客运西站 滇缅大道199
松滋客运中心 湖北省荆州市松滋市
呼和浩特通达长途汽车南站停车场 内蒙古自治区呼和浩特市玉泉区
汽车站旅馆 山东省烟台市芝罘区
黄江至深圳,广州专线客运站 西进路富丽广场102
宁波骆驼客运站 徐家附近
丘北客运服务中心站 云南省文山壮族苗族自治州丘北县
鹤壁鹿楼乡客运站 河南省鹤壁市山城区
临汾民翔旅游客运公司 山西省临汾市尧都区
遵义客运站 贵州省遵义市红花岗区
荣县留佳客运站 四川省自贡市荣县
商城汽车站售票厅 河南省南阳市卧龙区
南昌县交通运输协会莲南客运站 莲塘中大道
南浔汽车站候车厅 浙江省湖州市南浔区
建平汽车站 四川省绵阳市三台县
长潭河客运站 湖北省恩施土家族苗族自治州宣恩县
遂宁市中心汽车站 四川省遂宁市船山区
烟台汽车总站售票处 山东省烟台市芝罘区
丹水汽车站 河南省南阳市西峡县
通江涪阳镇客运站 四川省巴中市通江县
晋宁二街客运站 云南省昆明市晋宁县
纸坊汽车客运中心站 湖北省.武汉市北华街28号
左溪汽车站 五五省道
成都城厢客运站 四川省成都市青白江区
青岛华通客运公司 山东省青岛市平度市
吉水县城西汽车站 江西省吉安市吉水县
常河镇客运站 河北省邢台市平乡县
黎家客运站 四川省广安市邻水县
奉化市汽车东站 大成东路588
石柱汽车客运总站 重庆市石柱土家族自治县
龙口市公安局龙口汽车站派出所 山东省烟台市龙口市
张场客运站 四川省眉山市丹棱县
微山韩庄客运站 山东省济宁市微山县
黄滩客运站 湖北省孝感市应城市
泊头郝村客运站 广顺铸模有限公司南侧
孙家汽车站 重庆市
惠阳汽车客运总站 广东省惠州市惠阳区
贵港汽车东站 广西壮族自治区.贵港市金港大道507号
杨树湾客运站 一零一国道
南江下两汽车客运站 四川省巴中市南江县
石江汽车站 湖南省邵阳市洞口县
大湖车站 广东省河源市连平县
阿署达农村客运站 四川省攀枝花市东区
兰州阿甘镇汽车站 甘肃省兰州市七里河区
双流华阳汽车客运公司 四川省成都市双流县
雷州覃斗客运站 广东省湛江市雷州市
井研四合汽车站 四川省乐山市井研县
张寨客运站 三二八省道
桓台马桥客运站 山东省淄博市桓台县
禾生坑汽车站 广东省佛山市三水区
汤阴县菜园镇汽车客运站 河南省安阳市汤阴县
资阳汽车客运站售票厅 四川省资阳市雁江区
榆树公路客运总站 向阳路
泽国汽车站 泽楚路
乐陵郭家汽车站 山东省德州市乐陵市
堡石图客运站 吉林省四平市双辽市
黔城汽车站 湖南省怀化市洪江市
中国联通汽车站手机超市 河南省郑州市巩义市
城关镇客运站 河南省信阳市淮滨县
金阳县客运站 南街190
滦平巴克什营客运站 河北省承德市滦平县
格林豪泰酒店(汽车站店) 滨州市渤海五路黄海河三路交叉口(汽车站对面)
新郑千户寨客运站 驮窑村
濛阳客运站 九高路
张果屯客运站 河南省濮阳市南乐县
秋渠客运站 河南省周口市郸城县
会宁县亚欧汽车站 甘肃省白银市会宁县
监利客运北站 湖北省荆州市监利县

Copyright © 2016 phpStudy |