【问题标题】:PHP pagination upside downPHP分页颠倒
【发布时间】:2015-09-19 18:55:23
【问题描述】:

我的标准分页效果很好。我想做的就是把它颠倒过来。所以导航将从头开始。 5 | 4 | 3 | 2 | 1.我每页的限制是 15,所以我希望第 1 页包含 15 个元素,最后一页将包含最新的元素。我知道这是非常不寻常的方法,但这是我想做的。但我需要有人让我走上正确的道路并提供一些帮助,拜托。谢谢。

我的功能代码在这里:(缩短)

<?

$adjacents = 4;

$result = $mysqli->query("SELECT * FROM table");
$total_pages = $result->num_rows;
$result->close();

    /* Setup vars for query. */
    $targetpage = "articles";
    $limit = 15;                                
    $page = $_GET['page'];
    if($page) 
        $start = ($page - 1) * $limit;  
    else
        $start = 0;         

    /* Get data. */
    $sql = $mysqli->query("SELECT * FROM table ORDER BY id DESC LIMIT $start, $limit");


    /* Setup page vars for display. */
    if ($page == 0) $page = 1;                  //if no page var is given, default to 1.
    $prev = $page - 1;                          //previous page is page - 1
    $next = $page + 1;                          //next page is page + 1
    $lastpage = ceil($total_pages/$limit);      //lastpage is = total pages / items per page, rounded up.
    $lpm1 = $lastpage - 1;                      //last page minus 1


while($row = $sql->fetch_array())  {

$name = $row['name'];
$ource = $row['source'];

}

?>

<?=$pagination?>
<? $sql->close(); ?>

【问题讨论】:

  • 这里的问题是什么?您不能只提供 3 页代码并要求某人为您修复它。开始自己解决问题,如果遇到特定问题,请寻求帮助。
  • 嗨米兰 - 我不太确定如何开始?真的,我不指望任何人为我修复它.. 但是有人可以用一条线让我走上正确的道路,为我节省大量时间,或者向我展示我看不到的逻辑。

标签: php mysql pagination


【解决方案1】:

嗯...第一个提示 - 不要使用短开头的 php 标签。它们已被弃用,并且可能在某些服务器上给您带来问题.. 使用 &lt;?php 启动 php 代码。

其次,在您的代码中,您混合了显示寻呼机和页面内容的混合部分。该 mySql 查询用于获取当前页面的行。但是对于寻呼机,您将需要类似的查询,它将仅返回所有行的计数(因此没有限制部分)。

 $sql = $mysqli->query("SELECT COUNT(*) FROM table");

类似的...

当您获得该计数时(假设您总共有 45 行)。您必须计算总页数。就像:

$pages_number = ceil ($rows_count / $limit );

在我们的例子中,我们将有 3 个(页面)。

然后,您需要一些向后循环的 for 循环,从页数到 1,类似于:

for ($i = $pages_number; $i > 1; $i--){
 // write out current link
}

这个循环会给你数字 3,2,1...所以用它们创建链接并打印出来。

【讨论】:

    【解决方案2】:
    <?php
    $result = $mysqli->query("SELECT COUNT(*) FROM webelements WHERE web='ALR' AND cat='Article'");
    $total_results = $result->num_rows;
    $result->close();
    
        /* Setup vars for query. */
        $targetpage = "moving-articles";
        $limit = 15;                                
        $page = $_GET['page'];
        if($page) 
            $start = ($page - 1) * $limit;  
        else
            $start = 0;         
    
        /* Get data. */
        $sql = $mysqli->query("SELECT * FROM webelements WHERE web='ALR' AND cat='Article' ORDER BY datestamp DESC LIMIT $start, $limit");
    
        $prev = $page - 1;                          //previous page is page - 1
        $next = $page + 1;                          //next page is page + 1
        $lastpage = ceil($total_results/$limit);    //lastpage  = total results / items per page, rounded up.
        if ($page == 0) $page = $lastpage;          //if no page var is given, default to last page (as first page)
        $lpm1 = $lastpage - 1;                      //last page minus 1
    
        /* Draw the pagination object.  */
    
        $pagination = "";
        if($lastpage > 1)
        {   
            $pagination .= "
            <div class='pagination'>";
            /* Next Button */
            if ($page < $lastpage) 
                $pagination.= "<a href='$targetpage/page/$next/'>« next</a>";
            else
                $pagination.= "<span class='disabled'>« next</span>";   
    
            /* Backwards Pagination */
            for ($counter = $lastpage; $counter > 0; $counter--) {
                    if ($counter == $page)
                        $pagination.= "<span class='current'>$counter</span>";
                    else
                        $pagination.= "<a href='$targetpage/page/$counter/'>$counter</a>";
            }
    
            /* Previous Button */
            if ($page > $counter - 1) 
                $pagination.= "<a href='$targetpage/page/$prev/'>previous »</a>";
            else
                $pagination.= "<span class='disabled'>previous »</span>";
    
            $pagination.= "</div>";     
        }
    ?>
    

    【讨论】:

    • 你有这个@MilanG的cmet吗?
    • 关于第一个查询-您不必获取所有行并对其进行计数....使用mysql计数功能-更快。如果其余代码有效,那就没问题了。 :)
    • @MilanG,我设法向后显示导航,但相应的记录不正确。我认为这与 $start 和 $limit 值有关。我做错了什么?
    【解决方案3】:
    <?php
    $result = $mysqli->query("SELECT id FROM table");
    $total_results = $result->num_rows;
    $result->close();
    
        /* Setup vars for query. */
    
        $targetpage = "moving-articles";
        $limit = 5; 
        $adjacents = 5;
        $lastpage = ceil($total_results/$limit);                                
        $page = $_GET['page'];
        if( $page) 
            $start = ($page - 1) * $limit;  
        else
            $start = ($lastpage - 1) * $limit;; 
    
        /* Get data. */
        $sql = $mysqli->query("(SELECT * FROM table ORDER BY datestamp LIMIT $start, $limit) ORDER BY datestamp DESC");
        if ($page == '') $page = $lastpage; //if no page var is given, default to last page (as first page)
        $prev = $page - 1;                          //previous page is page - 1
        $next = $page + 1;                          //next page is page + 1
        $lpm1 = $lastpage - 1;                          
    
    
        /* Draw the pagination object.  */
    
        $pagination = "";
        if($lastpage > 1)
        {   
            $pagination .= "
            <div class='pagination'>";
            /* Next Button */
            if ($page < $lastpage) 
                $pagination.= "<a href='$targetpage/page/$next/'>« next</a>";
            else
                $pagination.= "<span class='disabled'>« next</span>";   
    
            if ($lastpage < $adjacents * 4) //not enough pages to bother breaking it up
            {   
            /* Backwards Pagination */
            for ($counter = $lastpage; $counter > 0; $counter--) {
                    if ($counter == $page)
                        $pagination.= "<span class='current'>$counter</span>";
                    else
                        $pagination.= "<a href='$targetpage/page/$counter/'>$counter</a>";
            }
            }
    
            else if($lastpage > $adjacents * 4) //enough pages to hide some
            {
                //close to beginning; only hide later pages
                if($page > $lastpage - $adjacents * 2)      
                {
    
                    for ($counter = $lastpage ; $counter > abs(($adjacents * 2) - $lastpage) - 1; $counter--)
                    {
                        if ($counter == $page)
                            $pagination.= "<span class='current'>$counter</span>";
                        else
                            $pagination.= "<a href='$targetpage/page/$counter/'>$counter</a>";                  
                    }
    
                    $pagination.= "...";
                    $pagination.= "<a href='$targetpage/page/2/'>2</a>";
                    $pagination.= "<a href='$targetpage/page/1/'>1</a>";
    
                }
            //in middle; hide some front and some back
                else if($page <= $lastpage - $adjacents * 2 && $page > $adjacents * 2)
                {
    
                    $pagination.= "<a href='$targetpage/page/$lastpage/'>$lastpage</a>";    
                    $pagination.= "<a href='$targetpage/page/$lpm1/'>$lpm1</a>";
                    $pagination.= "...";
                    for ($counter = $page + $adjacents; $counter > $page - $adjacents - 1 ; $counter--)
                    {
                        if ($counter == $page)
                            $pagination.= "<span class='current'>$counter</span>";
                        else
                            $pagination.= "<a href='$targetpage/page/$counter/'>$counter</a>";                  
                    }
                    $pagination.= "...";
                    $pagination.= "<a href='$targetpage/page/2/'>2</a>";
                    $pagination.= "<a href='$targetpage/page/1/'>1</a>";
    
                }
                //close to end; only hide early pages
                else
                {
                    $pagination.= "<a href='$targetpage/page/$lastpage/'>$lastpage</a>";    
                    $pagination.= "<a href='$targetpage/page/$lpm1/'>$lpm1</a>";
                    $pagination.= "...";
                    for ($counter = ($adjacents * 2) +1 ; $counter >= 1; $counter--)
                    {
                        if ($counter == $page)
                            $pagination.= "<span class='current'>$counter</span>";
                        else
                            $pagination.= "<a href='$targetpage/page/$counter/'>$counter</a>";                  
                    }
                }
    
            }
    
    
            /* Previous Button */
            if ($page > $counter - 1) 
                $pagination.= "<a href='$targetpage/page/$prev/'>previous »</a>";
            else
                $pagination.= "<span class='disabled'>previous »</span>";
    
            $pagination.= "</div>";     
        }
    
    ?>
    

    【讨论】:

    • 如果对这段代码有任何意见或建议请告诉我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    相关资源
    最近更新 更多