【问题标题】:How to implement final steps in pagination project?如何在分页项目中实现最后的步骤?
【发布时间】:2011-09-11 08:19:34
【问题描述】:

我正在对我的网站进行第一次分页实现。我觉得我很接近,只是混淆了我的逻辑或弄错了一些变量的位置或实际值。

代码如下:

                    $pgsize_wave = 40;
                    $pg_wave = (is_numeric($_GET["p"]) ? $_GET["p"] : 1);
                    $start = ($pg_wave-1)*$pgsize_wave;
                    $waves = mysql_query("SELECT * FROM `CysticAirwaves` LIMIT $start, $pgsize_wave");
                    $waves_total = mysql_query("SELECT COUNT(1) FROM `CysticAirwaves`");
                    $waves_total = mysql_fetch_row($waves_total);
                    $waves_total = $waves_total[0];
                    $max_pages = $waves_total / $pgsize_wave;
                    $max_pages = ceil($waves_total/$pgsize_waves);


                    ?>



                    <div id="all_page_turn">
                             <ul>

                                <?php if($waves_total > 40 && $pg_wave >= 40) { ?>
                                 <li class="PreviousPageBlog round_10px">
                                     <a href="Airwave_build.php?id=<?php echo $pg_wave - 40); ?>">Previous Page</a>
                                 </li>
                                 <?php } ?>

                                 <?php if($waves_total > 40 && $pg_wave < ($waves_total-40)) { ?>
                                 <li class="NextPageBlog round_10px">
                                     <a href="Airwave_build.php?id=<?php echo ($pg_wave + 40); ?>">Next Page</a>
                                 </li>
                                 <?php } ?>

                             </ul>
                        </div>

为了澄清任何混淆,广播是来自用户的帖子,我想限制每页 40 个。如果它有帮助,那就是在同一页面上拉电波的查询:

$query = "SELECT * FROM `CysticAirwaves` WHERE `FromUserID` = `ToUserID` AND `status` = 'active' ORDER BY `date` DESC, `time` DESC";
            $request = mysql_query($query,$connection);
            $counter = 0;
            while($result = mysql_fetch_array($request)) {

            $replies_q = "SELECT COUNT(`id`) FROM `CysticAirwaves_replies` WHERE `AirwaveID` = '" . $result['id'] . "' && `status` = 'active'";
            $request2 = mysql_query($replies_q,$connection);
            $replies = mysql_fetch_array($request2);
            $replies_num = $replies['COUNT(`id`)'];

            $counter++;
            $waver = new User($result['FromUserID']);

提前非常感谢。

【问题讨论】:

标签: php css pagination


【解决方案1】:

这是伪代码,但希望能解释其中的逻辑。

$total        = SELECT COUNT(*) FROM `waves`
$currentPage  = 1  // changes through page parameter in URL
$wavesPerPage = 40
$totalPages   = ceil($total / $wavesPerPage)
$offset       = ($wavesPerPage * ($currentPage - 1)) + 1

$waves = mysql_query("SELECT * FROM `waves` LIMIT $offset, $wavesPerPage");

while ($row = mysql_fetch_assoc($waves)) {
    echo $row['wave']
    …
}

输出分页链接:

if ($totalPages > 1) {
    if ($currentPage > 1) {
        printf('<a href="waves.php?page=%u">Previous</a>', $currentPage - 1);
    }

    for ($i = 1; $i <= $totalPages; $i++) {
        $class = ($i == $currentPage) ? 'selected' : null;
        printf('<a href="waves.php?page=%1$u" class="%2$s">Page %1$u</a>', $i, $class);
    }

    if ($currentPage < $totalPages) {
        printf('<a href="waves.php?page=%u">Next</a>', $currentPage + 1);
    }
}

【讨论】:

  • 我明白其中的逻辑。问题在于代码本身。所以伪代码对我没有多大好处。我不想让你为我做这件事,也许只是纠正我所拥有的,或者指出我所拥有的有什么问题。
  • 那到底是什么问题呢?很难用如此模糊的错误描述给出任何具体的建议,并且自己无法运行代码(因为我没有你的数据库)。在我看来,对于初学者来说,您的偏移量计算已经关闭。我建议你拆除你的脚本,实现上面的代码以获得一个工作最小的例子,然后从那里重新构建它。那个,或者尝试一步一步调试。
  • 我想我已经很接近了。我按照你的建议重新开始,但仍然没有成功。它不仅不限于 40 或分页。页面底部的下一个链接有大量的“Page$i”链接。这是最新的代码块。再次感谢您在这方面与我合作。我想将此标记为正确答案。 gist.github.com/9f92c5512ef324645342
  • 好吧,这显然对你来说有点太假了。再充实一点。您发布的代码中的问题显然是您没有循环通过您的 $result 资源。此外,您太从字面上理解了分页链接的生成。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 2023-01-20
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多