代码之家  ›  专栏  ›  技术社区  ›  James

分页控制有效页面的一种方法

php
  •  1
  • James  · 技术社区  · 8 年前

    我正在使用分页脚本来控制页面,以获取消息系统每页上显示的记录量。

    我使用的代码如下:

                    //PAGINATION//
            global $pagination;
            $total = $this->countInbox();
    
            $adjacents = 3;
            $targetpage = "messages.php?inbox"; //your file name
            $limit = 10; //how many items to show per page
            if(isset($_GET['page']))
            {
                $page = $_GET['page'];
            }else{
                $page = 0;
            }
    
            if($page){ 
                $start = ($page - 1) * $limit; //first item to display on this page
            }else{
                $start = 0;
            }
            /* 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 current page - 1
                $next = $page + 1; //next page is current page + 1
                $lastpage = ceil($total/$limit); //lastpage.
                $lpm1 = $lastpage - 1; //last page minus 1
    
            /* CREATE THE PAGINATION */
            $counter = "";
            $pagination = "";
            if($lastpage > 1)
            { 
                $pagination .= "<ul class='pagination'>";
                if ($page > (int)$counter+1) {
                    $pagination.= "<li><a href=\"$targetpage&page=$prev\"><</a></li>"; 
                }
    
                if ($lastpage < 7 + ($adjacents * 2)) 
                { 
                    for ($counter = 1; $counter <= $lastpage; $counter++)
                    {
                        if ($counter == $page)
                            $pagination.= "<li class='active'><a href='#' class='active'>$counter</a></li>";
                        else
                            $pagination.= "<li><a href=\"$targetpage&page=$counter\">$counter</a></li>"; 
                    }
                }
                elseif($lastpage > 5 + ($adjacents * 2)) //enough pages to hide some
                {
                    //close to beginning; only hide later pages
                    if($page < 1 + ($adjacents * 2)) 
                    {
                        for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                        {
                            if ($counter == $page)
                                $pagination.= "<li class='active'><a href='#' class='active'>$counter</a></li>";
                            else
                                $pagination.= "<li ><a href=\"$targetpage&page=$counter\">$counter</a></li>"; 
                        }
    
                        $pagination.= "<li><a href=\"$targetpage&page=$lpm1\">$lpm1</a></li>";
                        $pagination.= "<li><a href=\"$targetpage&page=$lastpage\">$lastpage</a></li>"; 
                    }
                    //in middle; hide some front and some back
                    elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
                    {
                        $pagination.= "<li><a href=\"$targetpage&page=1\">1</a></li>";
                        $pagination.= "<li><a href=\"$targetpage&page=2\">2</a></li>";
    
                        for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                        {
                            if ($counter == $page)
                                $pagination.= "<li class='active'><a href='#' class='active'>$counter</a></li>";
                            else
                                $pagination.= "<li><a href=\"$targetpage&page=$counter\">$counter</a></li>"; 
                        }
    
                        $pagination.= "<li><a href=\"$targetpage&page=$lpm1\">$lpm1</a></li>";
                        $pagination.= "<li><a href=\"$targetpage&page=$lastpage\">$lastpage</a></li>"; 
                    }
                    //close to end; only hide early pages
                    else
                    {
                        $pagination.= "<li><a href=\"$targetpage&page=1\">1</a></li>";
                        $pagination.= "<li><a href=\"$targetpage&page=2\">2</a></li>";
    
                        for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; 
                        $counter++)
                        {
                            if ($counter == $page)
                                $pagination.= "<li class='active'><a href='#' class='active'>$counter</a></li>";
                            else
                                $pagination.= "<li><a href=\"$targetpage&page=$counter\">$counter</a></li>"; 
                        }
                    }
                }
    
                //next button
                if ($page < $counter - 1) 
                    $pagination.= "<li><a href=\"$targetpage&page=$next\">></a></li>";
                else
                    $pagination.= "";
                $pagination.= "</ul>\n"; 
            }
    

    除了一件事之外,它工作得很好。如果我手动将一个页面输入到不存在的URL中,它会显示没有记录的页面,例如

    enter image description here

    如何停止手动输入,以便在页面=2或页面=3不存在时,自动将用户重定向到默认页面,如消息。php?收件箱

    我已经在使用另一个函数来控制其他有效页面。

    $validPages = array('inbox', 'archive','compose', 'mid', 'trash', 'deleted');
    $pageFound = false;
    
    foreach ($validPages as $validPage) {
    if (isset($_GET[$validPage])) {
        $pageFound = true;
        break;
    }
    }
    
    if (! $pageFound) {
    header("Location: messages.php?inbox");
    exit;
    }
    

    我想知道是否有一种方法可以在上面的函数中加入一个补丁。

    提前谢谢你。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Quentin    8 年前

    如何停止手动输入

    你不能。

    你无法控制访问者的要求。

    因此,如果页面=2或页面=3不存在,它将自动将用户重定向到默认页面,如消息。php?收件箱

    你知道有多少页( $lastpage )需要什么页面( $page ).

    比较一下这两个数字。

    if ($page > $lastpage) { ... }
    

    然后可以输出 404 Not Found (或者重定向,但404更有意义)。

    推荐文章