如何在 php 分页中显示前 3 页和后 3 页
How to show first 3 and last 3 pages in php pagination
我为文章创建了 php 分页,它显示了超过 1k 且越来越长的所有页面。
我想做这样的事情 prev 1234 ... 9999 next.
我试过这个答案 Limit pagination page number 但没能成功。
代码:
if(isset($_POST['records-limit'])){
$CurrentPage['records-limit'] = $_POST['records-limit'];
}
$limit = isset($CurrentPage['records-limit']) ? $CurrentPage['records-limit'] : 10;
$page = (isset($_GET['page']) && is_numeric($_GET['page']) ) ? $_GET['page'] : 1;
$paginationStart = ($page - 1) * $limit;
$authors = $db->getPosts("SELECT * FROM posts LEFT JOIN users ON posts.post_userId = users.user_id LIMIT $paginationStart, $limit")->fetchAll();
// Get total records
$sql = $db->getPosts("SELECT count(post_id) AS post_id FROM posts")->fetchAll();
$allRecrods = $sql[0]['post_id'];
// Calculate total pages
$totoalPages = ceil($allRecrods / $limit);
// Prev + Next
$prev = $page - 1;
$next = $page + 1;
分页
<ul class="pagination justify-content-end">
<li class="page-item <?php if($page <= 1){ echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page <= 1){ echo '#'; } else { echo "?page=" . $prev; } ?>">Geri</a>
</li>
<?php for($i = 1; $i <=$totoalPages; $i++ ): ?>
<li class="page-item <?php if($page == $i) {echo 'active'; } ?>">
<a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a>
</li>
<?php endfor; ?>
<li class="page-item <?php if($page >= $totoalPages) { echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page >= $totoalPages){ echo '#'; } else {echo "?page=". $next; } ?>">İleri</a>
</li>
</ul>
这是一个代码与您建议的代码不同的示例...我们基本上需要知道我们有多少页以及当前页...我假设页号在 [=20 中也是 /1 =] 这里:
<?php
$totoalPages = 1195;
$currentPage = 4;
?>
<style>
div#pagination {
display: flex;
}
</style>
<div id="pagination">
<?php
if ($currentPage > 1){
?>
<a href="/popular/whatever.html/<?php echo $currentPage - 1;?>" title="Prev"><div class="ctrl_el">Prev </div></a>
<?php
} ?>
<a href="/popular/whatever.html/<?php echo $currentPage;?>" title="Page <?php echo $currentPage;?>"><div class="ctrl_el"><?php echo $currentPage;?> </div></a>
<a href="/popular/whatever.html/<?php echo $currentPage + 1;?>" title="Page <?php echo $currentPage + 1;?>"><div class="ctrl_el"><?php echo $currentPage + 1;?> </div></a>
<a href="/popular/whatever.html/<?php echo $currentPage + 2;?>" title="Page <?php echo $currentPage + 2;?>"><div class="ctrl_el ctrl_sel"><?php echo $currentPage + 2;?> </div></a>
<a href="/popular/whatever.html/<?php echo $currentPage + 3;?>" title="Page <?php echo $currentPage + 3;?>"><div class="ctrl_el"><?php echo $currentPage + 3;?> </div></a>
<div class="ctrl_el_dot">....</div><a href="/popular/whatever.html/<?php echo $totoalPages;?>" title="Page <?php echo $totoalPages;?>"><div class="ctrl_el"><?php echo $totoalPages;?> </div></a>
<?php
if ($totoalPages > $currentPage){
?>
<a href="/popular/whatever.html/<?php echo $currentPage + 1;?>" title="Next"><div class="ctrl_el">Next</div></a>
<?php
} ?>
</div>
我添加的样式只是为了并排显示它们...
我看不出循环的理由,但用循环来做也是一样的:)
这将 return:
您可以使用
生成分页
<ul class="pagination justify-content-end">
<li class="page-item <?php if($page <= 1){ echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page <= 1){ echo '#'; } else { echo "?page=" . $prev; } ?>">Geri</a>
</li>
<?php for($i = $page; $i <= $page + 3; $i++ ): ?>
<?php
if($page < $totoalPages - $i){ ?>
<li class="page-item <?php if($page == $i) {echo 'active'; } ?>">
<a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a>
</li>
<?php }
?>
<?php endfor; ?>
<li class="page-item">
<span>....</span>
</li>
<?php for($i = 0; $i <= 3; $i++ ): ?>
<?php
if($totoalPages > $page - 4 - $i){ ?>
<li class="page-item <?php if($page == $totoalPages - (4 - $i)) {echo 'active'; } ?>">
<a class="page-link" href="posts.php?page=<?php echo $totoalPages - (4 - $i); ?>"> <?php echo $totoalPages - (4 - $i); ?> </a>
</li>
<?php }
?>
<?php endfor; ?>
<li class="page-item <?php if($page >= $totoalPages) { echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page >= $totoalPages){ echo '#'; } else {echo "?page=". $next; } ?>">İleri</a>
</li>
</ul>
我为文章创建了 php 分页,它显示了超过 1k 且越来越长的所有页面。
我想做这样的事情 prev 1234 ... 9999 next.
我试过这个答案 Limit pagination page number 但没能成功。
代码:
if(isset($_POST['records-limit'])){
$CurrentPage['records-limit'] = $_POST['records-limit'];
}
$limit = isset($CurrentPage['records-limit']) ? $CurrentPage['records-limit'] : 10;
$page = (isset($_GET['page']) && is_numeric($_GET['page']) ) ? $_GET['page'] : 1;
$paginationStart = ($page - 1) * $limit;
$authors = $db->getPosts("SELECT * FROM posts LEFT JOIN users ON posts.post_userId = users.user_id LIMIT $paginationStart, $limit")->fetchAll();
// Get total records
$sql = $db->getPosts("SELECT count(post_id) AS post_id FROM posts")->fetchAll();
$allRecrods = $sql[0]['post_id'];
// Calculate total pages
$totoalPages = ceil($allRecrods / $limit);
// Prev + Next
$prev = $page - 1;
$next = $page + 1;
分页
<ul class="pagination justify-content-end">
<li class="page-item <?php if($page <= 1){ echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page <= 1){ echo '#'; } else { echo "?page=" . $prev; } ?>">Geri</a>
</li>
<?php for($i = 1; $i <=$totoalPages; $i++ ): ?>
<li class="page-item <?php if($page == $i) {echo 'active'; } ?>">
<a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a>
</li>
<?php endfor; ?>
<li class="page-item <?php if($page >= $totoalPages) { echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page >= $totoalPages){ echo '#'; } else {echo "?page=". $next; } ?>">İleri</a>
</li>
</ul>
这是一个代码与您建议的代码不同的示例...我们基本上需要知道我们有多少页以及当前页...我假设页号在 [=20 中也是 /1 =] 这里:
<?php
$totoalPages = 1195;
$currentPage = 4;
?>
<style>
div#pagination {
display: flex;
}
</style>
<div id="pagination">
<?php
if ($currentPage > 1){
?>
<a href="/popular/whatever.html/<?php echo $currentPage - 1;?>" title="Prev"><div class="ctrl_el">Prev </div></a>
<?php
} ?>
<a href="/popular/whatever.html/<?php echo $currentPage;?>" title="Page <?php echo $currentPage;?>"><div class="ctrl_el"><?php echo $currentPage;?> </div></a>
<a href="/popular/whatever.html/<?php echo $currentPage + 1;?>" title="Page <?php echo $currentPage + 1;?>"><div class="ctrl_el"><?php echo $currentPage + 1;?> </div></a>
<a href="/popular/whatever.html/<?php echo $currentPage + 2;?>" title="Page <?php echo $currentPage + 2;?>"><div class="ctrl_el ctrl_sel"><?php echo $currentPage + 2;?> </div></a>
<a href="/popular/whatever.html/<?php echo $currentPage + 3;?>" title="Page <?php echo $currentPage + 3;?>"><div class="ctrl_el"><?php echo $currentPage + 3;?> </div></a>
<div class="ctrl_el_dot">....</div><a href="/popular/whatever.html/<?php echo $totoalPages;?>" title="Page <?php echo $totoalPages;?>"><div class="ctrl_el"><?php echo $totoalPages;?> </div></a>
<?php
if ($totoalPages > $currentPage){
?>
<a href="/popular/whatever.html/<?php echo $currentPage + 1;?>" title="Next"><div class="ctrl_el">Next</div></a>
<?php
} ?>
</div>
我添加的样式只是为了并排显示它们... 我看不出循环的理由,但用循环来做也是一样的:)
这将 return:
您可以使用
生成分页<ul class="pagination justify-content-end">
<li class="page-item <?php if($page <= 1){ echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page <= 1){ echo '#'; } else { echo "?page=" . $prev; } ?>">Geri</a>
</li>
<?php for($i = $page; $i <= $page + 3; $i++ ): ?>
<?php
if($page < $totoalPages - $i){ ?>
<li class="page-item <?php if($page == $i) {echo 'active'; } ?>">
<a class="page-link" href="posts.php?page=<?php echo $i; ?>"> <?php echo $i; ?> </a>
</li>
<?php }
?>
<?php endfor; ?>
<li class="page-item">
<span>....</span>
</li>
<?php for($i = 0; $i <= 3; $i++ ): ?>
<?php
if($totoalPages > $page - 4 - $i){ ?>
<li class="page-item <?php if($page == $totoalPages - (4 - $i)) {echo 'active'; } ?>">
<a class="page-link" href="posts.php?page=<?php echo $totoalPages - (4 - $i); ?>"> <?php echo $totoalPages - (4 - $i); ?> </a>
</li>
<?php }
?>
<?php endfor; ?>
<li class="page-item <?php if($page >= $totoalPages) { echo 'disabled'; } ?>">
<a class="page-link" href="<?php if($page >= $totoalPages){ echo '#'; } else {echo "?page=". $next; } ?>">İleri</a>
</li>
</ul>