如何在 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&nbsp;</div></a>
        <?php
    } ?>
    <a href="/popular/whatever.html/<?php echo $currentPage;?>" title="Page <?php echo $currentPage;?>"><div class="ctrl_el"><?php echo $currentPage;?>&nbsp;</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;?>&nbsp;</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;?>&nbsp;</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;?>&nbsp;</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;?>&nbsp;</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>