|
吾爱游客
发表于 2015-11-5 18:02
1、申 请 I D:maozhenyu
2、个人邮箱:maozhenyu@zhener.pw
3、原创技术文章:
本人主要研究和使用PHP C# JS C++(按熟练程度),正在学习Java和ASM,下面随便选了一篇(如何做出Discuz样的分页 PHP)
如何做出类似Discuz的按钮样式的分页系统?下面给出一个参考方案
第一步,我们需要对数据集LIMIT选取以及数据的总数统计
先定义一些基本参数
$maxRows_Recordset1 = 10;
$pageNum_Recordset1 = 0;
通过下列代码获取URL参数中的page
if (isset($_GET['page'])) {
$pageNum_Recordset1 = intval($_GET['page'])-1;
}
第1页在数据集中为第0页。所以需要减一
$startRow_Recordset1 = $pageNum_Recordset1 * $maxRows_Recordset1;
//这里我用了SESSION来记录数据的总数,防止多次查询,也可以让URL更加美观。大家也可以使用其他方法(注意需要session_start())
if ($_SESSION['totalpg']['user']!="") {
$totalRows_Recordset1 = $_SESSION['totalpg']['user'];
if($startRow_Recordset1>=$totalRows_Recordset1||$pageNum_Recordset1<=0){$startRow_Recordset1=0;$pageNum_Recordset1=0;}
}
MYSQL的连接部分就省略了
$query_Recordset1 = "SELECT * FROM member ORDER BY `uidid` ASC";
if($_SESSION['totalpg']['user']=="") { $_SESSION['totalpg']['user']=$totalRows_Recordset1 = mysql_num_rows(mysql_query($query_Recordset1));}
$query_limit_Recordset1 = sprintf("%s LIMIT %d, %d", $query_Recordset1, $startRow_Recordset1, $maxRows_Recordset1);
$Recordset1 = mysql_query($query_limit_Recordset1);
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalPages_Recordset1 = ceil($totalRows_Recordset1/$maxRows_Recordset1)-1;
这样下来,查询部分就完成了。中间的部分大家可以根据需要完成
第二步,按钮的逻辑和设计
[PHP] 纯文本查看 复制代码 //获得全局变量[/font]
[/font] global $pageNum_Recordset1,$totalPages_Recordset1,$totalRows_Recordset1;
//如果不需要分页就直接结束好了
if($totalPages_Recordset1==0||$totalPages_Recordset1=="-1"){return;}
//开头画UI
echo '<div class="cuspages right"><div class="pg"><em> '.$totalRows_Recordset1.' </em>';
//如果页数大于10。需要选择性显示
if($totalPages_Recordset1>10)
{
$dig=$pageNum_Recordset1-4<1?1:$pageNum_Recordset1-4; //显示往前5个按钮,到第一页就结束
$dip=$pageNum_Recordset1+5>$totalPages_Recordset1?$totalPages_Recordset1+1:$pageNum_Recordset1+5; //显示往后四个按钮
if($dip<10){$dip=10;}//如果没到10页,需要填充到10页
if($dig+7>$totalPages_Recordset1){$dig=$totalPages_Recordset1-7;}//到尾页就结束 不再继续退
}
//如果记录小于10 就不这么麻烦了
else{$dig=1;$dip=$totalPages_Recordset1+1;}
//如果第一页按钮没显示出 就得显示了
if($dig!=1){echo ' <a href="'.$mac.'&page=1" class="last">1 ...</a>';}
//如果不是第一页 显示上一页
if ($pageNum_Recordset1 > 0) { echo '<a href="'.$mac.'&page='.$pageNum_Recordset1.'" class="prev"><<</a>';}
//然后开始循环显示需要的按钮
for($ig=$dig;$ig<=$dip;$ig++)
{
if($ig==$pageNum_Recordset1+1){echo '<strong>'.$ig.'</strong>';}//当前页加粗显示
else{echo '<a href="'.$mac.'&page='.$ig.'">'.$ig.'</a>';}//不是当前页显示个按钮
}
//如果最后一页的按钮没显示处理的话
if($dip!=$totalPages_Recordset1+1)
{
$lp=($totalPages_Recordset1+1);echo ' <a href="'.$mac.'&page='.$lp.'" class="last">... '.$lp.'</a>';
}
//如果不是最后一页 就显示下一页按钮
if($pageNum_Recordset1 < $totalPages_Recordset1){
echo '<a href="'.$mac.'&page='.($pageNum_Recordset1+2).'" class="nxt">>></a>';
}
//结尾画UI
echo '<kbd><input type="text" name="custompage" size="3"></kbd></div></div>';
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|