Rated an average of 5 stars by 1 person

Phpagination - Easy Elegant Pagination

Script Details:
Added on November 4, 2010 by Turboladdade.
Turboladdade accreditted the script to "Dan Palka."

Description:
To use PHPagination, you simply call the PHPagination function and pass four arguments; the zero-based current page, the zero-based ending page, a string you'd like to appear before the pagination result, and a string you'd like to appear after each pagination result. PHPagination does the rest, and returns a nicely formatted line of HTML pagination. Find out more and try out an interactive demo at http://www.phpagination.com

Tags: pagination

Instructions:
Call the function like so:

PHPagination($pCurrent, $pEnd, $aLeft, $aRight, ($oMultiplier), ($oArrows));

$pCurrent is zero-based current page.

$pEnd is zero-based ending page or total pages.

$aLeft is what should be in a hyperlinked URL before (to the left of) the desired page.

$aRight is the same as above but after (to the right of) the desired page.

Optional $oMultiplier is used if you feed the page number directly into a SQL LIMIT. PHPagination automatically returns the correct number of pages even if page 2 is something like "start=20" in the URL variable.

Optional $oArrows is a boolean for whether or not you want arrows on either side (when applicable). The default is no.

Code:

<?php
# Snippet from PHP Share: http://www.phpshare.org

///////////////////////////////////////////////////////////////
// PHPagination v1 . 0 by Dan Palka, the most powerful wizard .//
// http:// www . phpagination . com //
///////////////////////////////////////////////////////////////

function PHPagination($pCurrent$pEnd$PHPagi_urlPre$PHPagi_urlPost$PHPagi_uMultiplier 1$PHPagi_doArrows false)
{
    
/////////////////////////////////////////////////
    // LAYOUT SETTINGS - CHANGE TO SUIT YOUR NEEDS //
    /////////////////////////////////////////////////
    
    
$PHPagi_htmlPre '< div class = "PHPagination"> ';
    
// Precedes pagination output . Default is '< div class = "PHPagination"> '.
    
$PHPagi_htmlPost '<div¬ class="PHPagination">';
    
// Suceeds pagination output . Default is '</ div > '.
    
$PHPagi_htmlDivider '</div>';
    
// Separates results . Default is ' | '.
    
$PHPagi_htmlOmission '|';
    
// Replaces omitted results . Default is '$hellip;
    
'.
    $PHPagin_sPage1 = '
strong Page ';
    // Goes before current page . Default is '
strong Page '.
    $PHPagin_sPage2 = ' 
of ';
    // Goes between current page and total pages . Default is ' 
of '.
    $PHPagin_s_Page3 = '
</ strong ';
    // Goes after total pages . Default is '
</ strong '.
    $PHPagi_leftArrow = '
&hellip;';
    // The left arrow . Default is ' 
&lt; &lt;
    
'.
    $PHPagi_rightArrow = '
¬ <strong>Page¬ ';
    // The right arrow . Default is ' 
&gt; &gt;
    
'.
    
    //////////////////////////////////////////
    // DON'
T CHANGE ANYTHING BELOW THIS BOX //
    //////////////////////////////////////////
    
    // Begin the PHPagination output . $pOutput = $PHPagi_htmlPre;
    
    // Check $pCurrent . if (is_numeric($pCurrent) == false || $pCurrent < -1)
    
{
        
$pOutput $pOutput 'PHPagination Error: Current page'$PHPagi_htmlPost;
        return 
$pOutput;
    }
    
    
// Check $pTotal . if (is_numeric($pEnd) == false || $pEnd < 0)
    
{
        
$pOutput $pOutput 'PHPagination Error: End page'$PHPagi_htmlPost;
        return 
$pOutput;
    }
    
    
// Check
    
if current page is outside the range of pages . if ($pCurrent $pEnd)
    {
        
// Return a nicely formatted error
        
$pOutput $pOutput 'PHPagination Error: Current page is greater than end page'$PHPagi_htmlPost;
        return 
$pOutput;
    }
    
    
$pCurrent floor($pCurrent $PHPagi_uMultiplier);
    
$pEnd floor($pEnd $PHPagi_uMultiplier);
    
    
// Create "Page x of x" string since it's the same no matter what . $pPageXofX = $PHPagin_sPage1 . number_format($pCurrent + 1) . $PHPagin_sPage2 . number_format($pEnd + 1) . $PHPagin_s_Page3;
    
    // Build reusable chunks of hyperlink . $pLink1 = '< a href = "'. $PHPagi_urlPre;
    
$pLink2 $PHPagi_urlPost '¬ of¬ ';
    
$pLink3 '</ a > ';
    
    
// Do we need a left arrow ?
    
    
if ($PHPagi_doArrows == true && $pCurrent 0)
    {
        
$pOutput $pOutput $pLink1 . (($pCurrent 1) * $PHPagi_uMultiplier) . $pLink2 $PHPagi_leftArrow $pLink3 $PHPagi_htmlDivider;
    }
    
    
// How many result units
    
do we want ?
    
    if (
$pEnd >= 14)
    {
        
$pUnits 14;
    }
    else
    {
        
$pUnits $pEnd;
    }
    
    
// Which ellipses
    
do we need ?
    
    if ((
$pEnd $pUnits) >= 2)
    {
        if (
$pCurrent >= && $pCurrent <= ($pEnd 8))
        {
            
$firstEllipsis true;
            
$secondEllipsis true;
        }
        elseif (
$pCurrent >= && $pCurrent >= ($pEnd 7))
        {
            
$firstEllipsis true;
            
$secondEllipsis false;
        }
        else
        {
            
$firstEllipsis false;
            
$secondEllipsis true;
        }
    }
    elseif ((
$pEnd $pUnits) == 1)
    {
        if (
$pCurrent >= 8)
        {
            
$firstEllipsis true;
            
$secondEllipsis false;
        }
        else
        {
            
$firstEllipsis false;
            
$secondEllipsis true;
        }
    }
    else
    {
        
$firstEllipsis false;
        
$secondEllipsis false;
    }
    
    
// Where is PageXofX located ?
    
    
if ($firstEllipsis == true && $secondEllipsis == true)
    {
        
$pageLocation 7;
    }
    elseif (
$firstEllipsis == true)
    {
        
$pageLocation = (14 - ($pEnd $pCurrent));
    }
    elseif (
$firstEllipsis == false && $pCurrent >= 0)
    {
        
$pageLocation $pCurrent;
    }
    else
    {
        
$pageLocation = -1;
    }
    
    
// Loop through each result unit . for ($i = 0; $i <= $pUnits; $i++)
    
{
        if (
$i == && $firstEllipsis == true)
        {
            
$pOutput $pOutput $PHPagi_htmlOmission;
            
$thisIsAnEllipsis true;
        }
        elseif (
$i == 11 && $secondEllipsis == true)
        {
            
$pOutput $pOutput $PHPagi_htmlOmission;
            
$thisIsAnEllipsis true;
        }
        else
        {
            
$thisIsAnEllipsis false;
        }
        
        if (
$thisIsAnEllipsis == false)
        {
            if (
$i 0)
            {
                if (
$firstEllipsis == true && $i == 4) {}
                elseif (
$secondEllipsis == true && $i == 12) {}
                else
                {
                    
$pOutput $pOutput $PHPagi_htmlDivider;
                }
            }
            
            if (
$pageLocation == $i)
            {
                
$pOutput $pOutput $pPageXofX;
            }
            elseif (
$thisIsAnEllipsis == false)
            {
                if (
$i <= 2)
                {
                    
$pOutput $pOutput $pLink1 . ($i $PHPagi_uMultiplier) . $pLink2 number_format($i 1) . $pLink3;
                }
                elseif (
$i >= && $i <= 11)
                {
                    if (
$firstEllipsis == true && $secondEllipsis == true)
                    {
                        
$pOutput $pOutput $pLink1 . (($pCurrent - ($i)) * $PHPagi_uMultiplier) . $pLink2 number_format(($pCurrent - ($i)) + 1) . $pLink3;
                    }
                    elseif (
$firstEllipsis == true && $secondEllipsis == false)
                    {
                        
$pOutput $pOutput $pLink1 . (($pEnd - (14 $i)) * $PHPagi_uMultiplier) . $pLink2 number_format(($pEnd - (14 $i)) + 1) . $pLink3;
                    }
                    elseif (
$firstEllipsis == false && $secondEllipsis == true)
                    {
                        
$pOutput $pOutput $pLink1 . ($i $PHPagi_uMultiplier) . $pLink2 number_format($i 1) . $pLink3;
                    }
                    else
                    {
                        
$pOutput $pOutput $pLink1 . ($i $PHPagi_uMultiplier) . $pLink2 number_format($i 1) . $pLink3;
                    }
                }
                elseif (
$i >= 12)
                {
                    
$pOutput $pOutput $pLink1 . (($pEnd - (14 $i)) * $PHPagi_uMultiplier) . $pLink2 number_format(($pEnd - (14 $i)) + 1) . $pLink3;
                }
            }
        }
    }
    
    
// Do we need a right arrow ?
    
    
if ($PHPagi_doArrows == true && $pCurrent $pEnd)
    {
        
$pOutput $pOutput $PHPagi_htmlDivider $pLink1 . (($pCurrent 1) * $PHPagi_uMultiplier) . $pLink2 $PHPagi_rightArrow $pLink3;
    }
    
    
// End the PHPagination output . $pOutput = $pOutput . $PHPagi_htmlPost;
    
    
return $pOutput;
}
?>

Review this PHP Script:

Rating:

Comments:




Comments

  • November 8, 2010
    Zhay Rated 5 stars
    Always looking for a good pagination script!

Login

User:
Pass:

Register

Not a member? Register today and receive the many free benefits of being a member!

Advertisements