Version: 1
Type: Full Script
Category: Other
License: GNU General Public License
Description: pagination class. for pagin large sql result sets over an number of pages.
<?php
class Pagination
{
var $limit;
var $sql;
var $mainQuery;
var $result;
var $total;
var $numPages;
var $page;
var $offset;
var $i;
var $str;
var $fullStr;
var $pageName;
var $noOfColumns=1;
var $displayStr;
var $row;
var $seperator="|";
var $emptyRowAfterData=0;
var $displayHeadingBgColor;
var $displayHeadingForeColor;
var $displayHeadingForeSize;
var $displayHeadingFace;
var $displayHeadingAlign=1;
var $displayHeadingStyleClass;
var $displayDataStyleClass;
var $displayDataBgColor;
var $displayDataForeColor;
var $displayDataForeSize;
var $displayDataFace;
var $displayExtraBgColor;
var $noListStyleClass;
var $noListBgColor;
var $noListFontColor;
var $noListFontFace;
var $noListFontSize;
var $displayNameArr = array();
function setNoListFontColor($getNoListFontColo) //this method is assign the fore color to the page no`s
{
$this->noListFontColor=$getNoListFontColo;
}
function setNoListFontFace($getNoListFontFace) //this method is assign the font to the page no`s
{
$this->noListFontFace=$getNoListFontFace;
}
function setNoListFontSize($getNoListFontSize) //this method is assign the font size to the page no`s
{
$this->noListFontSize=$getNoListFontSize;
}
function setNoListBgColor($getNoListBgColor) //this method is assign the back ground color to the page no`s
{
$this->noListBgColor=$getNoListBgColor;
}
function setNoListStyleClass($getNoListClass) //this method is assign the style sheet to the page no`s
{
$this->noListStyleClass=$getNoListClass;
}
function setDisplayDataForeColor($getDisForeColor) //this method is assign the fore color to the data displayed
{
$this->displayDataForeColor=$getDisForeColor;
}
function setDisplayDataForeSize($getDisSize) //this method is assign the font size to the data displayed
{
$this->displayDataForeSize=$getDisSize;
}
function setDisplayDataFace($getDisFace) //this method is assign the font to the data displayed
{
$this->displayDataFace=$getDisFace;
}
function setDisplayDataBgColor($getDisBgColor) //this method is assign the back ground color to the data displayed
{
$this->displayDataBgColor=$getDisBgColor;
}
function setDisplayDataStyleClass($getDataClass) //this method is assign the style sheet to the data displayed
{
$this->displayDataStyleClass=$getDataClass;
}
function setDisplayExtraBgColor($getExBgColor) //this method is assign the back ground color to the extra row
{
$this->displayExtraBgColor=$getExBgColor;
}
function setEmptyRowAfterData($getEmpty) //if this set to 1 then extra row will be added
{
$this->emptyRowAfterData=$getEmpty;
}
function setSeperator($getSeperator) //assign the custamize separators
{
$this->seperator=$getSeperator;
}
function setDisplayHeadingFace($getFace) //assign the heading font
{
$this->displayHeadingFace=$getFace;
}
function setDisplayHeadingStyleClass($getClass) //assign the style sheet for the heading
{
$this->displayHeadingStyleClass=$getClass;
}
function setDisplayHeadingForeSize($getSize) //assign the heading fore size
{
$this->displayHeadingForeSize=$getSize;
}
function setDisplayHeadingForeColor($getForeColor) //assign the heading fore color
{
$this->displayHeadingForeColor=$getForeColor;
}
function setDisplayHeadingBgColor($gotColor) //assign the heading back color
{
$this->displayHeadingBgColor=$gotColor;
}
function setDisplayHeadingAlign($gotAlign) //assign the headings alignment
{
$this->displayHeadingAlign=$gotAlign;
}
function setDisplayNames($gotNames) //assign the heading names
{
$this->displayNameArr=$gotNames;
}
function setColumns($no) //assign the no of columns to be displayed
{
$this->noOfColumns=$no;
}
function setLimit($limiter) //assign the no of records per a page
{
$this->limit=$limiter;
}
function setPageName($gotName) //assign the page name
{
$this->pageName=$gotName;
}
function setQuery($sqlQuery) //assign the query
{
if (strpos($sqlQuery,"limit")<> 0)
{
die ($this->error('<b>Limit</b> is a reserved keyword. - setQuery()'));
}
else
{
$this->sql=$sqlQuery;
}
}
function setPages($gotPage) //assign the current page
{
$this->page=$gotPage;
}
function error($errName) //error handler
{
print "<table border='0'><tr bgcolor='red'><td><font color='#fffffff'>Error</font></td></tr><tr><td>".$errName."</td></tr></table>";
}
function displayPages() // display all the recods
{
if ($this->pageName == "") // if page name is not given this generate an error
{
die ($this->error('Please specify the destination page'));
}
if ($this->sql=="") // if sql query is not specified this will generate an error
{
die ($this->error('Query haven`t specified'));
}
$this->displayStr="";
$this->fullStr="";
$this->str="";
$this->mainQuery=$this->sql;
$this->result=mysql_query($this->mainQuery) or die ($this->error('Invalid query')); // execute the query
$this->total=mysql_num_rows($this->result); // get the no of records
$this->numPages = ceil($this->total / $this->limit); // get the no of pages to be displayed
if ($this->page=="") // if pages is equal to nothing set it to the first page
{
$this->page=1;
}
if ($this->page > $this->numPages) //if some person try to enter invalid page no manually this will set page to last one
{
$this->page=$this->numPages;
}
$this->offset = ($this->page - 1) * $this->limit; // get the offset for the query
$this->mainQuery=$this->sql." LIMIT ".$this->offset." , ".$this->limit;
$this->result=mysql_query($this->mainQuery) or die ($this->error('Invalid query'));
//display results begin
$this->fullStr="<table border='0'>";
//generate the headings for display - start
if (count($this->displayNameArr)<>0)
{
$this->displayStr = "<tr ";
if ($this->displayHeadingBgColor <> "")
{
$this->displayStr .= "bgcolor='".$this->displayHeadingBgColor."'"; // set the headings background color
}
if ($this->displayHeadingStyleClass <> "")
{
$this->displayStr .= "class='".$this->displayHeadingStyleClass."' "; // set the headings style sheet
}
$this->displayStr .= ">";
for ($this->i=0;$this->i<count($this->displayNameArr);$this->i++) // for loop will run untill it reach the no of elements in the heading array
{
$this->displayStr .= "<td><div align='";
if ($this->displayHeadingAlign==0) // set the headings alignment to left
{
$this->displayStr .= "left";
}
else if ($this->displayHeadingAlign==1) // set the headings alignment to center
{
$this->displayStr .= "center";
}
else if ($this->displayHeadingAlign==2) // set the headings alignment to right
{
$this->displayStr .= "right";
}
else
{
die ($this->error('Invalid argument - setDisplayHeadingAlign()')); // if invalied aligment value is given then this will fire an error msg
}
$this->displayStr .= "'>";
if ($this->displayHeadingForeColor=="" && $this->displayHeadingForeSize=="" && $this->displayHeadingFace=="")
{
$this->displayStr .= $this->displayNameArr[$this->i]."</div></td>"; //if font propaties not set then display the contents without the font tags
}
else
{
$this->displayStr .= "<font ";
if ($this->displayHeadingForeColor<> "")
{
$this->displayStr .= "color='".$this->displayHeadingForeColor."' "; //set the font color of the heading
}
if ($this->displayHeadingForeSize <> "")
{
$this->displayStr .= "size='".$this->displayHeadingForeSize."' "; //set the font size of the heading
}
if ($this->displayHeadingFace <> "")
{
$this->displayStr .= "face='".$this->displayHeadingFace."' "; //set the font of the heading
}
$this->displayStr .= ">".$this->displayNameArr[$this->i]."</font></div></td>"; //display the heading from the heading array
}
}
$this->displayStr=$this->displayStr."</tr>";
if(count($this->displayNameArr)<$this->noOfColumns) // if both setDisplayNames() and setColumns() called then if column array count didnt mach the setColumns() method argument then this error will fire
{
die($this->error('No of columns do not match - setDisplayNames() and setColumns()'));
}
if($this->noOfColumns==1 && count($this->displayNameArr) > 1) //this will over write the setColumns() argument and no of column will assign to the count of the column array
{
$this->noOfColumns=count($this->displayNameArr);
}
}
//generate the headings for display - end
while ($this->row=mysql_fetch_array($this->result))
{
$this->displayStr .= "<tr";
if ($this->displayDataStyleClass <> "")
{
$this->displayStr .= " class='".$this->displayDataStyleClass."' "; // set the style sheet of the results
}
if ($this->displayDataBgColor <> "")
{
$this->displayStr .= " bgColor='".$this->displayDataBgColor."' "; // set the back ground color of the results
}
$this->displayStr .= ">";
for ($this->x=0;$this->x<$this->noOfColumns;$this->x++) // create the columns in the results
{
$this->displayStr .= "<td>";
if ($this->displayDataForeColor == "" && $this->displayDataForeSize == "" && $this->displayDataFace =="")
{
$this->displayStr .= $this->row[$this->x]."</td>"; //if font propaties not set then display the contents without the font tags
}
else
{
$this->displayStr .= "<font ";
if ($this->displayDataForeColor <> "")
{
$this->displayStr .= "color='".$this->displayDataForeColor."' "; //set font color of the results
}
if ($this->displayDataForeSize <> "")
{
$this->displayStr .= "size='".$this->displayDataForeSize."' "; //set font size of the results
}
if ($this->displayDataFace <> "")
{
$this->displayStr .= "face='".$this->displayDataFace."' "; //set font of the results
}
$this->displayStr .= ">".$this->row[$this->x]."</td>"; //display records from the record set
}
}
$this->displayStr=$this->displayStr."</tr>";
if ($this->emptyRowAfterData==1) //add spaces between results if the methoud set to true
{
$this->displayStr .="<tr";
if ($this->displayDataStyleClass <> "")
{
$this->displayStr .= " class='".$this->displayDataStyleClass."' "; // set the style of the extra line
}
if ($this->displayExtraBgColor <> "")
{
$this->displayStr .= " bgColor='".$this->displayExtraBgColor."' "; // set the back color of the extra line
}
$this->displayStr .= "><td colspan='".$this->noOfColumns."'> </td></tr>";
}
}
$this->fullStr=$this->fullStr.$this->displayStr."<table>";
//display results end
//display pagin begin
$this->fullStr=$this->fullStr."<table border='0'><tr><td> </td></tr><tr>";
if ($this->noListStyleClass == "" && $this->noListBgColor == "") //if back grond color and style sheet is not set to the page no`s then ignore those values and create the row
{
$this->fullStr=$this->fullStr."<td>";
}
else
{
$this->fullStr=$this->fullStr."<td ";
if ($this->noListStyleClass <> "")
{
$this->fullStr=$this->fullStr."class='".$this->noListStyleClass."' "; // set the style sheet for the page no`s
}
if ($this->noListBgColor <> "")
{
$this->fullStr=$this->fullStr."bgColor='".$this->noListBgColor."' "; // set the back ground color for the page no`s
}
$this->fullStr=$this->fullStr.">";
}
for($this->i=1;$this->i<=$this->numPages;$this->i++) // generate a no for individual pages
{
if($this->str=="")
{
if ($this->page== "" || $this->page ==1 )
{
$this->str=$this->i; // if first page is selected remove the hyper link from that no
}
else
{
$this->str="<a href='".$this->pageName."?page=".$this->i."'>".$this->i."</a>"; // else add the hyper link for the no
}
}
else //generate rest of the page no`s
{
if ($this->page == $this->i)
{
$this->str .=" ".$this->seperator." ".$this->i;
}
else
{
$this->str .=" ".$this->seperator." "."<a href='".$this->pageName."?page=".$this->i."'>".$this->i."</a>";
}
}
}
if ($this->noListFontColor == "" && $thia->noListFontFace == "" && $this->noListFontSize =="") //if font propaties not set then display the contents without the font tags
{
$this->fullStr .= $this->str."</td></tr></table>";
}
else
{
$this->fullStr .= "<font ";
if ($this->noListFontColor <> "")
{
$this->fullStr .= "color='".$this->noListFontColor."' "; //set the font color of the page no`s
}
if ($this->noListFontFace <> "")
{
$this->fullStr .= "face='".$this->noListFontFace."' "; //set the font of the page no`s
}
if ($this->noListFontSize <> "")
{
$this->fullStr .= "size='".$this->noListFontSize."' "; //set the font size of the page no`s
}
$this->fullStr .= ">".$this->str."</font></td></tr></table>";
}
//display pagin end
echo $this->fullStr; // display full results with heading and and page no`s
}
}
?>