最近几天,我一直在基于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 →</a>
</div>
</div>
</div>
</div>
我不知道在可点击的链接部分进行编码的最佳方法,任何朝着正确方向的帮助将不胜感激。
答案 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,这将帮助您实现更简洁的代码。
答案 2 :(得分:0)
您可以使用Object-Oriented Programming来
而且,您也可以在MYSQL中使用LIMIT
和OFFSET
。 LIMIT 25 OFFSET 50
将选择第50-75行。
谢谢。