PHP分页算法

PHP分页算法

<html>
    <head>
        <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css">
        <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">
        <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
        <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
    </head>
<body>
    <div class="container">
<?php
$page = isset($_GET['page']) ? $_GET['page'] : 1;
echo getPaginationString($page, $total = 80, $limit = 5, $adjacents = 1, $targetpage = '/php/demo.php', $pagestring = '?page=');

//$page = isset($_GET['page']) ? $_GET['page'] : 1;
//echo getPaginationString2($page, $total = 80, $limit = 5, $showPageCount = 5, $targetpage = '/php/demo.php', $pagestring = '?page=');
?>
</div>
</body>
</html>
<?php
//function to return the pagination string
function getPaginationString($page = 1, $totalitems, $limit = 15, $adjacents = 3, $targetpage = "/", $pagestring = "?page=")
{
    //defaults
    if(!$adjacents) $adjacents = 1;
    if(!$limit) $limit = 15;
    if(!$page) $page = 1;
    if(!$targetpage) $targetpage = "/";

    //other vars
    $prev = $page - 1;                                    //previous page is page - 1
    $next = $page + 1;                                    //next page is page + 1
    $lastpage = ceil($totalitems / $limit);                //lastpage is = total items / items per page, rounded up.
    $lpm1 = $lastpage - 1;                                //last page minus 1

    /*
        Now we apply our rules and draw the pagination object.
        We're actually saving the code to a variable in case we want to draw it more than once.
    */
    $pagination = "";
    if($lastpage > 1)
    {
        $pagination .= "<ul class="pagination"";
        if(isset($margin, $padding))
        {
            $pagination .= " style="";
            if($margin)
                $pagination .= "margin: $margin;";
            if($padding)
                $pagination .= "padding: $padding;";
            $pagination .= """;
        }
        $pagination .= ">";

        //previous button
        if ($page > 1)
            $pagination .= "<li><a href="$targetpage$pagestring$prev">« prev</a></li>";
        else
            $pagination .= "<li><span class="disabled">« prev</span></li>";

        //pages
        if ($lastpage < 7 + ($adjacents * 2))    //not enough pages to bother breaking it up
        {
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination .= "<li><span class="current">$counter</span></li>";
                else
                    $pagination .= "<li><a href="" . $targetpage . $pagestring . $counter . "">$counter</a></li>";
            }
        }
        elseif($lastpage >= 7 + ($adjacents * 2))    //enough pages to hide some
        {
            //close to beginning; only hide later pages
            if($page < 1 + ($adjacents * 3))
            {
                for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)
                {
                    if ($counter == $page)
                        $pagination .= "<li><span class="current">$counter</span></li>";
                    else
                        $pagination .= "<li><a href="" . $targetpage . $pagestring . $counter . "">$counter</a></li>";
                }
                $pagination .= "<li><span class="elipses">...</span></li>";
                $pagination .= "<li><a href="" . $targetpage . $pagestring . $lpm1 . "">$lpm1</a></li>";
                $pagination .= "<li><a href="" . $targetpage . $pagestring . $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 . $pagestring . "1">1</a></li>";
                $pagination .= "<li><a href="" . $targetpage . $pagestring . "2">2</a></li>";
                $pagination .= "<li><span class="elipses">...</span></li>";
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)
                {
                    if ($counter == $page)
                        $pagination .= "<li><span class="current">$counter</span></li>";
                    else
                        $pagination .= "<li><a href="" . $targetpage . $pagestring . $counter . "">$counter</a></li>";
                }
                $pagination .= "<li><a href='javascript:;'>...</a></li>";
                $pagination .= "<li><a href="" . $targetpage . $pagestring . $lpm1 . "">$lpm1</a></li>";
                $pagination .= "<li><a href="" . $targetpage . $pagestring . $lastpage . "">$lastpage</a></li>";
            }
            //close to end; only hide early pages
            else
            {
                $pagination .= "<li><a href="" . $targetpage . $pagestring . "1">1</a></li>";
                $pagination .= "<li><a href="" . $targetpage . $pagestring . "2">2</a></li>";
                $pagination .= "<li><span class="elipses">...</span></li>";
                for ($counter = $lastpage - (1 + ($adjacents * 3)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination .= "<li><span class="current">$counter</span></li>";
                    else
                        $pagination .= "<li><a href="" . $targetpage . $pagestring . $counter . "">$counter</a></li>";
                }
            }
        }

        //next button
        if ($page < $counter - 1)
            $pagination .= "<li><a href="" . $targetpage . $pagestring . $next . "">next »</a></li>";
        else
            $pagination .= "<li><span class="disabled">next &raquo;</span></li>";
        $pagination .= "</ul>
";
    }

    return $pagination;

}


/**
function getPaginationString2($page = null, $totalItems = null, $limit = 5, $showPageCount = 4, $target = '/', $pageString = '?page=')
{
    $totalPage = ceil($totalItems / $limit); // compute total page

    if(($offset = ($page + floor($showPageCount / 2))) > $totalPage)
        $offset = $totalPage;

    if($page + floor($showPageCount / 2) > $totalPage)
        $counter = $totalPage - floor($showPageCount / 2);
    else
        $counter = ($computerPage = $page - floor($showPageCount / 2)) > 0 ? $computerPage : 1;

    $pagination = '<ul class="pagination">';
    for($counter; $counter < $offset; $counter++)
    {
        $pagination .= '<li><a href="'.$target.$pageString.$counter.'">'.$counter . '</a></li>';
    }

    $pagination .= '</ul>';

    return $pagination;
}
 */

原文地址:https://www.cnblogs.com/luowen/p/4764832.html