Here’s the paginator file code. I also attached the operationListing.php and paginator.class.php files in a zip.
paginator.class.php
<?php
class Paginator{
var $items_per_page;
var $items_total;
var $current_page;
var $num_pages;
var $mid_range;
var $low;
var $high;
var $limit;
var $return;
var $default_ipp = 25;
var $querystring;
function Paginator()
{
$this->current_page = 1;
$this->mid_range = 7;
$this->items_per_page = (!empty($_GET['ipp'])) ? $_GET['ipp']:$this->default_ipp;
}
function paginate()
{
$newAddress = $_SERVER['REQUEST_URI'];
$args = explode("&",$newAddress);
foreach($args as $arg)
{
$keyval = explode("=",$arg);
//if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg;
//echo "<p>KeyVAL: ".$keyval[0]."</p>";
if($keyval[0] == 'page' || $keyval[0] == 'ipp')
{
$newAddress = changeArgumentValueInRequestURI( "page" , false ,$newAddress );
$newAddress = changeArgumentValueInRequestURI( "ipp" , false ,$newAddress );
}
}
if($_GET['ipp'] == 'All')
{
$this->num_pages = ceil($this->items_total/$this->default_ipp);
$this->items_per_page = $this->default_ipp;
}
else
{
if(!is_numeric($this->items_per_page) OR $this->items_per_page <= 0) $this->items_per_page = $this->default_ipp;
$this->num_pages = ceil($this->items_total/$this->items_per_page);
}
$this->current_page = (int) $_GET['page']; // must be numeric > 0
if($this->current_page < 1 Or !is_numeric($this->current_page)) $this->current_page = 1;
if($this->current_page > $this->num_pages) $this->current_page = $this->num_pages;
$prev_page = $this->current_page-1;
$next_page = $this->current_page+1;
if($_GET)
{
/*
$args = explode("&",$_SERVER['PHP_SELF']);
foreach($args as $arg)
{
$keyval = explode("=",$arg);
//if($keyval[0] != "page" And $keyval[0] != "ipp") $this->querystring .= "&" . $arg;
//echo "<p>KeyVAL: ".$keyval[0]."</p>";
}
*/
}
if($_POST)
{
foreach($_POST as $key=>$val)
{
if($key != "page" And $key != "ipp") $this->querystring .= "&$key=$val";
}
}
if($this->num_pages > 10)
{
$this->return = ($this->current_page != 1 And $this->items_total >= 10) ? "<li class=\"btn_prev\"><a class=\"paginate\" href=\"$newAddress&page=$prev_page&ipp=$this->items_per_page$this->querystring\">« Previous</a></li> ":"<li>« Previous</li> ";
$this->start_range = $this->current_page - floor($this->mid_range/2);
$this->end_range = $this->current_page + floor($this->mid_range/2);
if($this->start_range <= 0)
{
$this->end_range += abs($this->start_range)+1;
$this->start_range = 1;
}
if($this->end_range > $this->num_pages)
{
$this->start_range -= $this->end_range-$this->num_pages;
$this->end_range = $this->num_pages;
}
$this->range = range($this->start_range,$this->end_range);
for($i=1;$i<=$this->num_pages;$i++)
{
if($this->range[0] > 2 And $i == $this->range[0]) $this->return .= " ... ";
// loop through all pages. if first, last, or in range, display
if($i==1 Or $i==$this->num_pages Or in_array($i,$this->range))
{
$this->return .= ($i == $this->current_page And $_GET['page'] != 'All') ? "<a title=\"Go to page $i of $this->num_pages\" class=\"current\" href=\"#\">$i</a> ":"<a class=\"paginate\" title=\"Go to page $i of $this->num_pages\" href=\"$newAddress&page=$i&ipp=$this->items_per_page$this->querystring\">$i</a> ";
}
if($this->range[$this->mid_range-1] < $this->num_pages-1 And $i == $this->range[$this->mid_range-1]) $this->return .= " ... ";
}
$this->return .= (($this->current_page != $this->num_pages And $this->items_total >= 10) And ($_GET['page'] != 'All')) ? "<li><a class=\"btn_next\" href=\"$newAddress&page=$next_page&ipp=$this->items_per_page$this->querystring\">Next »</a>\n":"<li>» Next</li>\n";
$this->return .= ($_GET['page'] == 'All') ? "<li><a class=\"current\" href=\"#\">All</a></li>":"<li><a class=\"paginate\" href=\"$newAddress&page=1&ipp=All$this->querystring\">All</a></li>";
}
else
{
for($i=1;$i<=$this->num_pages;$i++)
{
$this->return .= ($i == $this->current_page) ? "<li><a class=\"current\" href=\"#\">$i</a></li>":"<li><a href=\"$newAddress&page=$i&ipp=$this->items_per_page$this->querystring\">$i</a></li> ";
}
$this->return .= "<li><a class=\"paginate\" href=\"$newAddress&page=1&ipp=All$this->querystring\">All</a></li>";
}
$this->low = ($this->current_page-1) * $this->items_per_page;
$this->high = ($_GET['ipp'] == 'All') ? $this->items_total:($this->current_page * $this->items_per_page)-1;
$this->limit = ($_GET['ipp'] == 'All') ? "":" LIMIT $this->low,$this->items_per_page";
}
function display_items_per_page()
{
$newAddress = $_SERVER[REQUEST_URI];
$newAddress = changeArgumentValueInRequestURI( "page" , false ,$newAddress );
$newAddress = changeArgumentValueInRequestURI( "ipp" , false ,$newAddress );
$items = '';
$ipp_array = array(10,25,50,100,'All');
foreach($ipp_array as $ipp_opt) $items .= ($ipp_opt == $this->items_per_page) ? "<option selected value=\"$ipp_opt\">$ipp_opt</option>\n":"<option value=\"$ipp_opt\">$ipp_opt</option>\n";
return "<span class=\"paginate\">Items per page:</span><select class=\"paginate\" onchange=\"window.location='$newAddress&page=1&ipp='+this[this.selectedIndex].value+'$this->querystring';return false\">$items</select>\n";
}
function display_jump_menu()
{
$newAddress = $_SERVER[REQUEST_URI];
$newAddress = changeArgumentValueInRequestURI( "page" , false ,$newAddress );
$newAddress = changeArgumentValueInRequestURI( "ipp" , false ,$newAddress );
for($i=1;$i<=$this->num_pages;$i++)
{
$option .= ($i==$this->current_page) ? "<option value=\"$i\" selected>$i</option>\n":"<option value=\"$i\">$i</option>\n";
}
return "<span class=\"paginate\">Page:</span><select class=\"paginate\" onchange=\"window.location='$newAddress&page='+this[this.selectedIndex].value+'&ipp=$this->items_per_page$this->querystring';return false\">$option</select>\n";
}
function display_pages()
{
return $this->return;
}
}
/**********************/
function changeArgumentValueInRequestURI( $sArgumentName, $sNewArgumentValue , $sRequestUri )
{
/**
* Three alternatives
* 1. The only parameter. E.g. start.php?parameter=value
* 2. Parameter at the end. E.g. start.php?id=1¶meter=value
* 3. Parameter in the middle E.g. start.php?id=1¶meter=value&number=2
*/
$sScriptUrl = substr($sRequestUri, 0 , strpos($sRequestUri , "?") );
//echo 'Script URL: '.$sScriptUrl.'<br>';
$sQueryString = substr( $sRequestUri , strpos($sRequestUri , "?")+1 );
//echo 'Query URL: '.$sQueryString.'<br>';
$aArguments = explode("&" , $sQueryString );
//echo 'Query URL: '.$aArguments.'<br>';
if(isset( $aArguments ) && count( $aArguments ) > 0 )
{
foreach( $aArguments AS $sArgumentString )
{
//echo 'Arguments: '.$aArgumentString.'<br>';
preg_match( "/^(.*)=(.*)$/" , $sArgumentString , $aMatches );
$aArgumentValues[$aMatches[1]] = $aMatches[2];
}
}
//Replace value
if ( $sNewArgumentValue !== false )
{
if ( array_key_exists( $sArgumentName , $aArgumentValues ) )
{
$aArgumentValues[ $sArgumentName ] = $sNewArgumentValue;
}
}
else//Remove value
{
if ( array_key_exists( $sArgumentName , $aArgumentValues ) )
{
unset( $aArgumentValues[$sArgumentName] );
}
}
$sQueryString = "";
//Build new query string
if(isset( $aArgumentValues ) && count( $aArgumentValues ) >0 )
{
$sQueryString = "?";
foreach( $aArgumentValues AS $key => $value )
{
$sQueryString .= $key."=".$value."&";
}
$sQueryString = substr( $sQueryString , 0 , strlen( $sQueryString ) -1 ) ;
}
return $sScriptUrl.$sQueryString;
}
?>
@sottwell...
If you help me fix this, I with either donate $25 to modx to send it directly to you. Your choice.