PHP分页之自动适应范围的页码分页程序

网上有很多这篇文章内容,我只是拿过来修改了一下几个参数,以便容易读懂

可以自动适应范围的页码分页程序,页码格式如下
<< < 1 2 3 4 5 6 7 > >>
<< < 6 7 8 9 10 11 12 > >>

 

<?php

/*
 * @param $pageid 当前$_GET获得的页码
 * @param $total 总记录数
 * @param $uri 页码连接文件名
 * @param $perpage 每页显示
 * @param $pagelen 最多显示几个页码 注意(奇数),对称嘛!
 * return 函数返回一个数组:
 * pagecode 索引对应的内容是 生成的HTML 代码
 * sqllimit 索引对应的是sql limit 后缀
*/

function page($pageid,$total,$uri,$perpage=10,$pagelen=7){
	$pagecode = ''; # 定义变量,存放分页生成的HTML
	$pageid   = intval($pageid);  # 避免非数字页码
	$total    = intval($total); # 保证总记录数值类型正确
	if(!$total) return array(); # 总记录数为零返回空数组
	$pages  = ceil($total/$perpage);# 计算总分页
	if($pageid<1) $pageid = 1; # 处理页码合法性
	if($pageid>$pages) $pageid = $pages;
	$offset = $perpage*($pageid-1); # 计算查询偏移量
	//页码范围计算
	$init       = 1;      # 起始页码数
	$max        = $pages; # 结束页码数
	$pagelen    = ($pagelen%2) ? $pagelen : $pagelen+1; # 页码个数
	$pageoffset = ($pagelen-1)/2; # 页码个数左右偏移量
	
	//生成html
	$pagecode  ='<div class="page">';
	$pagecode .="<span>$pageid/$pages</span>"; # 第几页,共几页
	if($pageid!=1){ # 如果是第一页,则不显示第一页和上一页的连接
		$pagecode.="<a href=\"{$uri}?pageid=1\"><<</a>";        # 第一页
		$pagecode.="<a href=\"{$uri}?pageid=".($pageid-1)."\"><</a>";# 上一页
	}
	if($pages>$pagelen) { # 分页数大于页码个数时可以偏移	
		if($pageid<=$pageoffset) {//如果当前页小于等于左偏移
			$init = 1;
			$max  = $pagelen;
		} else { # 如果当前页大于左偏移	
			if($pageid + $pageoffset>=$pages+1) { # 如果当前页码右偏移超出最大分页数
			    $init = $pages-$pagelen+1;
			} else { # 左右偏移都存在时的计算
				$init = $pageid-$pageoffset;
				$max  = $pageid+$pageoffset;
			}
		}
	}
	//生成html
	for( $i=$init; $i<=$max; $i++ ) {
		if( $i==$pageid ) {
			$pagecode .= '<span>'.$i.'</span>';
		} else {
			$pagecode .= "<a href=\"{$uri}?pageid={$i}\">$i</a>";
		}
	}
	if($pageid!=$pages){
		$pagecode .= "<a href=\"{$uri}?pageid=".($pageid+1)."\">></a>"; # 下一页
		$pagecode .= "<a href=\"{$uri}?pageid={$pages}\">>></a>";  # 最后一页
	}
	$pagecode .= '</div>';
	return array('pagecode'=>$pagecode,'sqllimit'=>' limit '.$offset.','.$perpage);
	}
?>

PHP视频教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值