Help - Search - Members - Calendar
Full Version: Pagination how to (<<PREV NEXT>>)
Pixel2Life Forum > Member Tutorials and Requests > Forum Tutorial Archives > PHP Tutorials
Hooch
This is the best way to paginate I have seen.

Site 1 This link is the source code.
Site 2 This site customizes the above scripts
Site 3 This site shows how to implement the code above to your needs.

Take the time to learn this code. You will save yourself a lot of headaches.
I use this script for all my pagination needs.

Below is the basic setup I use for the above links..

style.css (Black Style theme from Site #2)
CODE
/*  ==========    Pagination     ==========  */
/*
Plugin Name: WP-Digg Style Paginator
Plugin URI: http://www.mis-algoritmos.com/2007/09/09/wp-digg-style-pagination-plugin-v-10/
Author: Victor De la Rocha
Author URI: http://www.mis-algoritmos.com
More style below...
http://www.mis-algoritmos.com/2007/03/16/some-styles-for-your-pagination/
*/

/*CSS black style pagination*/
    div.pagination {
        padding: 3px;
        margin: 3px;
        text-align:center;
        color:#a0a0a0;
        font-size:80%;
    }
    div.pagination a {
        border: 1px solid #909090;
        margin-right:3px;
        padding:2px 5px;
        background-image:url(bar.gif);
        background-position:bottom;
        text-decoration: none;
        color: #c0c0c0;
    }
    div.pagination a:hover, div.meneame a:active {
        border: 1px solid #f0f0f0;
        background-image:url(barinv.gif);
        background-color:#404040;
        color: #ffffff;
    }
    div.pagination span.current {
        margin-right:3px;
        padding:2px 5px;
        border: 1px solid #ffffff;
        font-weight: bold;
        background-color: #606060;
        color: #ffffff;
    }
    div.pagination span.disabled {
        margin-right:3px;
        padding:2px 5px;
        border: 1px solid #606060;
        color: #808080;
    }

page.php **This is where the results are displayed**
CODE
<?PHP

session_start();

require_once 'db.php';//Connect to your DATABASE
include 'page_pagination.php';//Include the pagination for THIS page
?>
<link href="style.css" rel="stylesheet" type="text/css">

<table width="" border="0" align="center" cellpadding="3" cellspacing="0">
  <tr>
    <td width="" align="center" class=""><?PHP echo $pagination;?></td>
  </tr>
  <tr>
    <td align="center" valign="top">
<?PHP
    if ($total_pages == 0)
    //$total_pages is queried from the include above (page_pagination.php')
        {
        //There are no results :(
        echo '<p></p><p></p><b>Sorry, there are no results as of yet.<b><p></p><p></p>:(<p></p><p></p>';
        }else{    
        //There are results :)
        //$result is queried from the include above (page_pagination.php')
        while($r = mysql_fetch_array($result))
            {            
            //Print out the results
            echo $r['info'].'<br>';
            }
            //End of while statement
        }
        //End of if statement
?>
    </td>
  </tr>
  <tr>
    <td> </td>
  </tr>
</table>
</body>
</html>

page_pagination.php
CODE
<?PHP

//Source...http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
//Customize the css...http://www.mis-algoritmos.com/2007/03/16/some-styles-for-your-pagination/
//Help to impliment...http://www.phpeasystep.com/phptu/29.html


    //include('db.php');    // include your code to connect to DB.
    $tbl_name="upload";        //****EDIT HERE**** your table name    
    $adjacents = 2;            //****EDIT HERE**** How many adjacent pages should be shown on each side of active page?
    
    /*
       First get total number of rows in data table.
       If you have a WHERE clause in your query, make sure you mirror it here.
    */
    $query = "SELECT COUNT(*) as num FROM $tbl_name";
    $total_pages = mysql_fetch_array(mysql_query($query));
    $total_pages = $total_pages['num'];
    
    /* Setup vars for query. */
    $targetpage = "page.php";                 //****EDIT HERE**** your file name  (the name of the page referring to this file)
    $limit = 7;                             //****EDIT HERE**** how many items to show per page
    $page = $_GET['page'];
    if($page)
        $start = ($page - 1) * $limit;             //first item to display on this page
    else
        $start = 0;                                //if no page var is given, set start to 0
    
    /* Get data. */
    $sql = "SELECT * FROM $tbl_name WHERE `active` = 1 ORDER BY `date` DESC LIMIT $start, $limit";    //****EDIT HERE**** you need to edit... WHERE `active` = 1 ORDER BY `date` DESC
    $result = mysql_query($sql);
    
    /* 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
    
    /*
        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 .= "<div class=\"pagination\">";
        //previous button
        if ($page > 1)
            $pagination.= "<a href=\"$targetpage?page=$prev\"><< previous</a>";
        else
            $pagination.= "<span class=\"disabled\"><< previous</span>";    
        
        //pages    
        if ($lastpage < 7 + ($adjacents * 2))    //not enough pages to bother breaking it up
        {    
            for ($counter = 1; $counter <= $lastpage; $counter++)
            {
                if ($counter == $page)
                    $pagination.= "<span class=\"current\">$counter</span>";
                else
                    $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                    
            }
        }
        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.= "<span class=\"current\">$counter</span>";
                    else
                        $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                    
                }
                $pagination.= "...";
                $pagination.= "<a href=\"$targetpage?page=$lpm1\">$lpm1</a>";
                $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";        
            }
            //in middle; hide some front and some back
            elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))
            {
                $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
                $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
                $pagination.= "...";
                for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $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=$lpm1\">$lpm1</a>";
                $pagination.= "<a href=\"$targetpage?page=$lastpage\">$lastpage</a>";        
            }
            //close to end; only hide early pages
            else
            {
                $pagination.= "<a href=\"$targetpage?page=1\">1</a>";
                $pagination.= "<a href=\"$targetpage?page=2\">2</a>";
                $pagination.= "...";
                for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++)
                {
                    if ($counter == $page)
                        $pagination.= "<span class=\"current\">$counter</span>";
                    else
                        $pagination.= "<a href=\"$targetpage?page=$counter\">$counter</a>";                    
                }
            }
        }
        
        //next button
        if ($page < $counter - 1)
            $pagination.= "<a href=\"$targetpage?page=$next\">next >></a>";
        else
            $pagination.= "<span class=\"disabled\">next >></span>";
        $pagination.= "</div>\n";        
    }
?>


I hope this helps.
derek.sullivan
This tutorial from P2L has never failed me. Try this out...

http://www.pixel2life.com/publish/tutorial...n_to_your_site/
rc69
Moved to proper category.
Mr.Shawn
Nice link. Very good post.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2009 Invision Power Services, Inc.