分页自定义博客脚本

时间:2019-02-19 21:28:35

标签: php

最近几天,我一直在基于Bootstrap 4开发自定义博客脚本,除了在主页上的分页外,我几乎完成了所有工作,我在页面的上半部分进行了编码(主要是从数据库中获取计数) ),但“旧帖子>”部分给了我一些问题,我对分页从未感到满意。

代码:

  <!-- Main Content -->
  <div class="container">
    <div class="row">
      <div class="col-lg-8 col-md-10 mx-auto">

        <?php 

           if (isset($_GET['page'])) {
                $page = $_GET['page'];
           } else {
                $page = 1;
           }

           $max_results = 50;
           $from = $page * $max_results - $max_results;

           $posts = DB::getInstance()->select('
                SELECT  *
                FROM    `blog_posts`
                ORDER   BY `post_date` DESC
                LIMIT   :from, :max_results',
           [
                'from' => [
                    'type' => PDO::PARAM_INT,
                    'value' => $from
                ],
                'max_results' => [
                    'type' => PDO::PARAM_INT,
                    'value' => $max_results
                ]
           ]);

           $total_results = DB::getInstance()->selectValue('SELECT count(*) FROM `blog_posts`');

           if ($total_results < 1) {
               stderr('There is <b>no</b> posts yet!');
           } else {            

        ?>

            <?php foreach($posts as $post) { ?>

            <div class="post-preview">
              <a href="post.html"><h2 class="post-title"><?= urlFriendlyUrls($post['post_title'], $post['post_id']); ?></h2></a>
              <p class="post-meta"><?= truncateArticle($post['post_body'], 250); ?></p>
              <p class="post-meta">Posted by <a href="#">Start Bootstrap</a> on <?= date("F j, Y, g:i a", strtotime($post['post_date'])); ?></p>
            </div>
            <hr>

            <?php } ?>  

        <?php } ?>  

        <!-- Pager -->
        <div class="clearfix">
          <a class="btn btn-primary float-right" href="#">Older Posts &rarr;</a>
        </div>

      </div>

    </div>
  </div>

我不知道在可点击的链接部分进行编码的最佳方法,任何朝着正确方向的帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用OFFSET和LIMIT或任何PDO修改查询以限制基于$_GET['page']获得的结果量。

下一步是使您的Older Posts按钮转到相同的网页,但网址中带有page=$_GET['page'] - 1

因此,每次点击Older Posts时,您都应该转到上一页-您可能还希望将其限制为0。

答案 1 :(得分:1)

如果要将页面包含在旧帖子链接中,只需添加以下代码:

<a href="?page=<?php echo ($page + 1); ?>

我还建议尝试研究OOP,这将帮助您实现更简洁的代码。

Object Oriented Programming in PHP

答案 2 :(得分:0)

您可以使用Object-Oriented Programming

  • 使代码干净
  • 防止重复
  • 轻松重用

而且,您也可以在MYSQL中使用LIMITOFFSETLIMIT 25 OFFSET 50将选择第50-75行。

谢谢。