页码生成
<?php
/**
* [pageData 获取分页数据]
* @param [自然数] $showRow [每页显示条数]
* @param [自然数] $p [当前页码]
* @param [字符串] $table [要进行数据分页的表]
* @param [字符串] $where [条件]
* @param [字符串] $order [排序]
* @param [字符串] $count [统计数据后显示重命名]
* @param [字符串] $field [字段名]
* @return [数组|false] [查询结果]
*/
function pageData($showRow,$p,$table,$where='',$order=' id desc ',$count='count',$field='*'){
$allRow=getCount($table,$where,$count);//获取数据总条数
$allPage=ceil($allRow[$count]/$showRow);//通过向上取整(总条数除以每页显示条数的商)获取总页数
if($p<1)//如果获取的页码小于1
{
$p=1;//重置为1
}
if($p>$allPage)//如果获取的页码大于总页数
{
$p=$allPage;//重置为总页数的值
}
$startRow=($p-1)*$showRow;//获取截取数据的开始条数
return getList($table,$where,$order,$startRow.','.$showRow,$field);//获取当前页的数据
}
/**
* [pageDataJoin 获取联表查询后的分页数据]
* @param [自然数] $showRow [每页显示条数]
* @param [自然数] $p [当前页码]
* @param [字符串] $table [要进行数据分页的表]
* @param [字符串] $table2 [关联的表]
* @param [字符串] $field [字段名]
* @param [字符串] $on [关联条件]
* @param [字符串] $order [排序]
* @param [字符串] $where [条件]
* @param [字符串] $join [关联类型]
* @return [数组|false] [查询结果]
*/
function pageDataJoin($showRow,$p,$table1,$table2,$field,$on,$order=' id desc ',$where='',$join='inner'){
$allRow=getCount($table1,$where);//获取数据总条数
$allPage=ceil($allRow['count']/$showRow);//通过向上取整(总条数除以每页显示条数的商)获取总页数
if($p<1)//如果获取的页码小于1
{
$p=1;//重置为1
}
if($p>$allPage)//如果获取的页码大于总页数
{
$p=$allPage;//重置为总页数的值
}
$startRow=($p-1)*$showRow;//获取截取数据的开始条数
return getJoin($table1,$table2,$field,$on,$order,$startRow.','.$showRow,$where,$join);//获取当前页的数据
}
/**
* [page 获取分页页码]
* @param [自然数] $showRow [每页显示条数]
* @param [自然数] $p [当前页码]
* @param [字符串] $url [url参数]
* @param [字符串] $where [条件]
* @return [数组|false] [查询结果]
*/
function page($showRow,$p,$table,$url,$where='',$showPage=5){
$allRow=getCount($table,$where);//获取数据总条数
$allPage=ceil($allRow['count']/$showRow);//通过向上取整(总条数除以每页显示条数的商)获取总页数
if($p<1)//如果获取的页码小于1
{
$p=1;//重置为1
}
if($p>$allPage)//如果获取的页码大于总页数
{
$p=$allPage;//重置为总页数的值
}
$page='';//声明保存页码的变量
if($allPage>1) //如果总页数大于1,表示需要分页页码
{
//$showPage=5;//设置显示页码数
$pageP=$p-1;//获取上一页的页码
if($pageP<1)//如果上一页的页码小于1
{
$pageP=1;//重置为1
}
$pageN=$p+1;//获取下一页的页码
if($pageN>$allPage)//如果下一页的页码大于总页数
{
$pageN=$allPage;//重置为总页数的值
}
$page.="<a href='index.php?".$url."&p=1'>首页</a>";//设置首页页码
$page.="<a href='index.php?".$url."&p=".$pageP."'>上一页</a>";//设置上一页页码
$offset=floor($showPage/2);//通过向下取整获取页码偏移量
if($showPage<$allPage) //如果显示页码数小于总页数,表示只显示设定的页码
{
if($p<=$offset) //如果当前页码小于或等于偏移量,开始页码为1,结束页码为显示页码数
{
$startPage=1;//获取开始页码
$endPage=$showPage;//获取结束页码
}
else //如果当前页码大于偏移量,开始页码为当前页码减去页码偏移量,结束页码为当前页码加上页码偏移量
{
$startPage=$p-$offset;//获取开始页码
$endPage=$p+$offset;//获取结束页码
if($p>$allPage-$offset) //如果当前页码大于总页数减去页码偏移量,开始页码为总页数减去显示页码数加1,结束页码为总页数
{
$startPage=$allPage-$showPage+1;//获取开始页码
$endPage=$allPage;//获取结束页码
}
}
}
else //如果显示页码数大于总页数,表示显示全部页码
{
$startPage=1;//获取开始页码
$endPage=$allPage;//获取结束页码
}
if($startPage>1)//如果开始页码大于1,表示前面还有页码
{
$page.="<a>...</a>";//增加...
}
for ($i=$startPage; $i <=$endPage ; $i++)//根据开始页码与结束页码进行循环生成页码
{
if($p==$i)//如果当前页码等于此次循环生成的页码
{
$page.="<a class='on' href='index.php?".$url."&p=".$i."'>".$i."</a>";//添加样式class名
}
else//否则
{
$page.="<a href='index.php?".$url."&p=".$i."'>".$i."</a>";//不加样式class名
}
}
if($endPage<$allPage)//如果结束页码小于总页数,表示后面还有页码
{
$page.="<a>...</a>";//增加...
}
$page.="<a href='index.php?".$url."&p=".$pageN."'>下一页</a>";//设置下一页页码
$page.="<a href='index.php?".$url."&p=".$allPage."'>末页</a>";//设置末页页码
}
return $page;
}
?>