Maozhenyu-毛真宇です 发表于 2015-11-5 18:02

申请会员ID:maozhenyu

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;

这样下来,查询部分就完成了。中间的部分大家可以根据需要完成
第二步,按钮的逻辑和设计

//获得全局变量
        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>';

Hmily 发表于 2015-11-10 12:47

明天开放注册,自己来注册吧。
页: [1]
查看完整版本: 申请会员ID:maozhenyu