【问题标题】:How to change Pagination from 'per page' to only first and last pages?如何将分页从“每页”更改为只有第一页和最后一页?
【发布时间】:2020-01-22 16:20:41
【问题描述】:

我有一个用于表格分页的代码。 但现在我有一个问题。分页显示每一页。但我有 900 多页。

另外:我需要使用 PDO

我希望分页像这样工作:

Image

我不知道如何在我已经存在的代码中做到这一点:

        $per_page_html = '';
        $page = 1;
        $start=0;
        if(!empty($_POST["page"])) {
            $page = $_POST["page"];
            $start=($page-1) * ROW_PER_PAGE;
        }
        $limit=" limit " . $start . "," . ROW_PER_PAGE;
        $pagination_statement = $oConn->prepare($sql);
        $pagination_statement->execute();

        $row_count = $pagination_statement->rowCount();
        if(!empty($row_count)){
            $per_page_html .= "<div style='text-align:center;margin:20px 0px;'>";
            $page_count=ceil($row_count/ROW_PER_PAGE);
            if($page_count>1) {
                for($i=1;$i<=$page_count;$i++){
                    if($i==$page){
                        $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page current" />';
                    } else {
                        $per_page_html .= '<input type="submit" name="page" value="' . $i . '" class="btn-page" />';
                    }
                }
            }
            $per_page_html .= "</div>";
        }

        $query = $sql.$limit;
        $pdo_statement = $oConn->prepare($query);
        $pdo_statement->execute();
        $result = $pdo_statement->fetchAll();

【问题讨论】:

  • 看这个教程它有你需要的东西:phppot.com/php/php-pagination
  • ROW_PER_PAGE 10 是您的页数限制。!它应该在您的页面顶部作为定义变量,或者您可以使用限制 10;
  • @Dilek 我知道我有 define("ROW_PER_PAGE",10);设置
  • @Dilek 您发送的链接对我没有多大帮助,我必须使用 PDO 制作所有内容。我还能使用该链接吗?
  • 那么您需要一个能够导航到第一页和最后一页的解决方案吗?

标签: php html pagination


【解决方案1】:

我在您的问题中没有看到您的表格和查询,因此我将提供 2 个在我的演示站点上测试过的完整示例,您需要将其更改为您自己的变量。

解决方案 1。

以下是属于某个类别的项目的示例分页,简单分页

$perpage = "3";
//This limit of the page to show on each page
$n_stmt = $pdo->prepare("SELECT * FROM categories");
$n_stmt->execute(); 
$total_posts = $n_stmt->rowCount();
$total_pages = ceil($total_posts/$perpage);
$page = !empty($_GET['page']) && $_GET['page'] ? (int) $_GET['page'] : 1;
if($page < 1) $page = 1;
if($page > $total_pages) $page = $total_pages;
$limit = ($page - 1) * $perpage;
$pag_limit = 10;
$stmt = $pdo->prepare("SELECT * FROM categories ORDER BY created DESC LIMIT :limit, :perpage");
$stmt->bindValue(":limit",$limit, PDO::PARAM_INT);
$stmt->bindValue(":perpage",$perpage, PDO::PARAM_INT);
$stmt->execute();
while($news = $stmt->fetch(PDO::FETCH_ASSOC)){
 // Do what ever you want here

} 

和分页:

<div class="pagination">
<?php   if($page >1){?>
    <a href="category/page/1">First</a>
    <a href="category/page/<?php echo $page - 1;?>">Preview</a>

    <?php } for($i = $page - $pag_limit; $i < $page + $pag_limit + 1; $i++){ 
        if($i > 0 and $i <= $total_pages){
            if($i == $page){?>
                <a href="category/page/<?php echo $i;?>" class="active"><?php echo $i;?></a>
            <?php }else{?>
            <a href="category/page/<?php echo $i;?>"><?php echo $i;?></a>
            <?php   
            }
        }
    ?>

    <?php } ?>

    <?php if($page != $total_pages){?>
    <a href="category/page/<?php echo $page + 1;?>">next</a>
    <a href="category/page/<?php echo $total_pages;?>">Last</a>
    <?php } ?>
</div>

解决方案 2。

这是您的代码搜索结果的分页,正如我所说,此代码在我的演示站点上有效,您需要更改自己的变量及其在 pdo 中:

define("ROW_PER_PAGE",10);
//this goes on top of your page

require_once("db.php");  
    $search_keyword = '';
    if(!empty($_POST['search']['keyword'])) {
        $search_keyword = htmlspecialchars(strip_tags($_POST["search"]["keyword"]), ENT_QUOTES);
    }
    $sql = 'SELECT * FROM posts WHERE title LIKE :keyword OR descriptions LIKE :keyword OR subject LIKE :keyword ORDER BY id DESC ';

    /* Pagination Code starts */
    $per_page_html = '';
    $page = 1;
    $start=0;
    if(!empty($_POST["page"])) {
        $page = $_POST["page"];
        $start=($page-1) * ROW_PER_PAGE;
    }
    $limit=" limit " . $start . "," . ROW_PER_PAGE;
    $pagination_statement = $pdo->prepare($sql);
    $pagination_statement->bindValue(':keyword', '%' . $search_keyword . '%', PDO::PARAM_STR);
    $pagination_statement->execute();

    $row_count = $pagination_statement->rowCount();
    if(!empty($row_count)){
        $per_page_html .= "<div class=\"pagination\">";
        $page_count=ceil($row_count/ROW_PER_PAGE);
        if($page_count>1) {
            for($i=1;$i<=$page_count;$i++){
                if($i==$page){
                    $per_page_html .= "<input type=\"submit\" name=\"page\" value=" . $i . " class=\"btn-page current\" />";
                } else {
                    $per_page_html .= "<input type=\"submit\" name=\"page\" value=" . $i . " class=\"btn-page\"/>";
                }
            }
        }
        $per_page_html .= "</div>";
    }

    $query = $sql.$limit;
    $pdo_statement = $pdo->prepare($query);
    $pdo_statement->bindValue(":keyword", "%" . $search_keyword . "%", PDO::PARAM_STR);
    $pdo_statement->execute();
    $result = $pdo_statement->fetchAll();

您的 html 部分在底部带有分页,您的结果与您看到的形式相同

<form name="frmSearch" action="search/" method="post">
<div class="searchf">
<input type="text" name="search[keyword]" class="field" value="<?php echo $search_keyword; ?>" id="keyword" maxlength="25">
<input type="submit" name="submit" class="searchf-btn" value="Ara">
</div>
    <?php
    if(!empty($result)) { 
        foreach($result as $row) {
    ?>
    <div class="news_box">
    <a href="<?php echo htmlspecialchars($row["news_url"]);?>/" title="<?php echo htmlspecialchars($row["title"]);?>">
        <div class="title"><h2><?php echo htmlspecialchars($row["title"]);?></h2></div>
        <div class="image">
        <img src="images/posts/<?php echo htmlspecialchars($row["img"]);?>" alt="<?php echo htmlspecialchars($row["title"]);?>"/></div>
        <div class="spot"><?php echo htmlspecialchars($row["subject"]);?></div>
    </a>
    </div>
    <?php
        }
    }
    ?>
<div class="cl">&nbsp;</div>
//Here is pagination
<?php echo $per_page_html; ?>
</form>

我在演示中使用 seo url,你需要为链接设置 htaccess,或者像这样更改分页链接:your_page.php?page=$i

在我的演示站点上进行了测试并且工作正常,我使用了一些过滤功能,您可以将它们删除。

【讨论】:

  • 我尝试了第二个代码与搜索。但我仍然有 900 页....如果我共享整个页面会更容易吗?
  • @Lisa-x 很奇怪,我只得到 10 个 define("ROW_PER_PAGE",10); 你一定是做错了什么或者更改了代码或删除了限制。定义应该位于页面中所有内容的最前面。
  • 对不起,我可能不清楚。我每页有 10 行。只有我在底部有 900 页来自 $per_page_html;。这就是问题所在。我需要这样的东西:i.stack.imgur.com/qnsEc.png
  • @Lisa-x 是那个搜索结果页面还是它的什么?如果不是搜索结果页面,请尝试解决方案 1 并删除除下一个和预览之外的分页
  • 不,它不是搜索结果页面。它是我加载的数据表。有很多行
猜你喜欢
  • 1970-01-01
  • 2018-01-24
  • 2021-06-06
  • 2020-07-10
  • 1970-01-01
  • 2021-05-14
  • 2023-04-03
  • 2014-08-20
  • 2020-10-26
相关资源
最近更新 更多