Kod:
Kod
<?php
/**
* PHPSense Pagination Class
*
* PHP tutorials and scripts
*
* @package PHPSense
* @author Jatinder Singh Thind
* @copyright Copyright (c) 2006, Jatinder Singh Thind
* @link http://www.phpsense.com
*/
// ------------------------------------------------------------------------
class PS_Pagination {
var $php_self;
var $rows_per_site = 50; //Number of records to display per site
var $total_rows = 0; //Total number of rows returned by the query
var $links_per_site = 7; //Number of links to display per site
var $append = ""; //Paremeters to append to pagination links
var $sql = "";
var $debug = false;
var $conn = false;
var $site = 1;
var $max_sites = 0;
var $offset = 0;
/**
* Constructor
*
* @param resource $connection Mysql connection link
* @param string $sql SQL query to paginate. Example : SELECT * FROM users
* @param integer $rows_per_site Number of records to display per site. Defaults to 10
* @param integer $links_per_site Number of links to display per site. Defaults to 5
* @param string $append Parameters to be appended to pagination links
*/
function PS_Pagination($connection, $sql, $rows_per_site = 10, $links_per_site = 5, $append = "") {
$this->conn = $connection;
$this->sql = $sql;
$this->rows_per_site = (int)$rows_per_site;
if (intval($links_per_site ) > 0) {
$this->links_per_site = (int)$links_per_site;
} else {
$this->links_per_site = 5;
}
$this->append = $append;
$this->php_self = htmlspecialchars($_SERVER['PHP_SELF'] );
if (isset($_GET['site'] )) {
$this->site = intval($_GET['site'] );
}
}
/**
* Executes the SQL query and initializes internal variables
*
* @access public
* @return resource
*/
function paginate() {
//Check for valid mysql connection
if (! $this->conn || ! is_resource($this->conn )) {
if ($this->debug)
echo "MySQL connection missing<br />";
return false;
}
//Find total number of rows
$all_rs = @mysql_query($this->sql );
if (! $all_rs) {
if ($this->debug)
echo "SQL query failed. Check your query.<br /><br />Error Returned: " . mysql_error();
return false;
}
$this->total_rows = mysql_num_rows($all_rs );
@mysql_close($all_rs );
//Return FALSE if no rows found
if ($this->total_rows == 0) {
if ($this->debug)
echo "Query returned zero rows.";
return FALSE;
}
//Max number of sites
$this->max_sites = ceil($this->total_rows / $this->rows_per_site );
if ($this->links_per_site > $this->max_sites) {
$this->links_per_site = $this->max_sites;
}
//Check the site value just in case someone is trying to input an aribitrary value
if ($this->site > $this->max_sites || $this->site <= 0) {
$this->site = 1;
}
//Calculate Offset
$this->offset = $this->rows_per_site * ($this->site - 1);
//Fetch the required result set
$rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_site}" );
if (! $rs) {
if ($this->debug)
echo "Pagination query failed. Check your query.<br /><br />Error Returned: " . mysql_error();
return false;
}
return $rs;
}
/**
* Display the link to the first site
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to 'First'
* @return string
*/
function renderFirst($tag = 'Pierwsza') {
if ($this->total_rows == 0)
return FALSE;
if ($this->site == 1) {
return "$tag";
} else {
return '<a href="' . $this->php_self . '?site=1&' . $this->append . '">' . $tag . '</a> ';
}
}
/**
* Display the link to the last site
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to 'Last'
* @return string
*/
function renderLast($tag = 'Ostatnia') {
if ($this->total_rows == 0)
return FALSE;
if ($this->site == $this->max_sites) {
return '';
} else {
return '<span class="site_link"> <a href="' . $this->php_self . '?site=' . $this->max_sites . '&' . $this->append . '">' . $this->max_sites . '</a></span>';
}
}
/**
* Display the next link
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to '>>'
* @return string
*/
function renderNext($tag = '...') {
if ($this->total_rows == 0)
return FALSE;
if ($this->site < $this->max_sites) {
return '<span class="site_link">'. $tag .'</span>';
} else {
return '';
}
}
/**
* Display the previous link
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to '<<'
* @return string
*/
function renderPrev($tag = '<<') {
if ($this->total_rows == 0)
return FALSE;
}
/**
* Display the site links
*
* @access public
* @return string
*/
function renderNav($prefix = '<span class="site_link">', $suffix = '</span>') {
if ($this->total_rows == 0)
return FALSE;
$batch = ceil($this->site / $this->links_per_site );
$end = $batch * $this->links_per_site;
if ($end == $this->site) {
//$end = $end + $this->links_per_site - 1;
//$end = $end + ceil($this->links_per_site/2);
}
if ($end > $this->max_sites) {
$end = $this->max_sites;
}
$start = $end - $this->links_per_site + 1;
$links = '';
for($i = $start; $i <= $end; $i ++) {
if ($i == $this->site) {
$links .= $prefix . "$i" . $suffix;
} else {
$links .= '' . $prefix . '<a href="' . $this->php_self . '?site=' . $i . '&' . $this->append . '">' . $i . '</a>' . $suffix . ' ';
}
}
return $links;
}
/**
* Display full pagination navigation
*
* @access public
* @return string
*/
function renderFullNav() {
return $this->renderFirst() . ' ' . $this->renderPrev() . ' ' . $this->renderNav() . ' ' . $this->renderNext() . ' ' . $this->renderLast();
}
/**
* Set debug mode
*
* @access public
* @param bool $debug Set to TRUE to enable debug messages
* @return void
*/
function setDebug($debug) {
$this->debug = $debug;
}
}
?>
/**
* PHPSense Pagination Class
*
* PHP tutorials and scripts
*
* @package PHPSense
* @author Jatinder Singh Thind
* @copyright Copyright (c) 2006, Jatinder Singh Thind
* @link http://www.phpsense.com
*/
// ------------------------------------------------------------------------
class PS_Pagination {
var $php_self;
var $rows_per_site = 50; //Number of records to display per site
var $total_rows = 0; //Total number of rows returned by the query
var $links_per_site = 7; //Number of links to display per site
var $append = ""; //Paremeters to append to pagination links
var $sql = "";
var $debug = false;
var $conn = false;
var $site = 1;
var $max_sites = 0;
var $offset = 0;
/**
* Constructor
*
* @param resource $connection Mysql connection link
* @param string $sql SQL query to paginate. Example : SELECT * FROM users
* @param integer $rows_per_site Number of records to display per site. Defaults to 10
* @param integer $links_per_site Number of links to display per site. Defaults to 5
* @param string $append Parameters to be appended to pagination links
*/
function PS_Pagination($connection, $sql, $rows_per_site = 10, $links_per_site = 5, $append = "") {
$this->conn = $connection;
$this->sql = $sql;
$this->rows_per_site = (int)$rows_per_site;
if (intval($links_per_site ) > 0) {
$this->links_per_site = (int)$links_per_site;
} else {
$this->links_per_site = 5;
}
$this->append = $append;
$this->php_self = htmlspecialchars($_SERVER['PHP_SELF'] );
if (isset($_GET['site'] )) {
$this->site = intval($_GET['site'] );
}
}
/**
* Executes the SQL query and initializes internal variables
*
* @access public
* @return resource
*/
function paginate() {
//Check for valid mysql connection
if (! $this->conn || ! is_resource($this->conn )) {
if ($this->debug)
echo "MySQL connection missing<br />";
return false;
}
//Find total number of rows
$all_rs = @mysql_query($this->sql );
if (! $all_rs) {
if ($this->debug)
echo "SQL query failed. Check your query.<br /><br />Error Returned: " . mysql_error();
return false;
}
$this->total_rows = mysql_num_rows($all_rs );
@mysql_close($all_rs );
//Return FALSE if no rows found
if ($this->total_rows == 0) {
if ($this->debug)
echo "Query returned zero rows.";
return FALSE;
}
//Max number of sites
$this->max_sites = ceil($this->total_rows / $this->rows_per_site );
if ($this->links_per_site > $this->max_sites) {
$this->links_per_site = $this->max_sites;
}
//Check the site value just in case someone is trying to input an aribitrary value
if ($this->site > $this->max_sites || $this->site <= 0) {
$this->site = 1;
}
//Calculate Offset
$this->offset = $this->rows_per_site * ($this->site - 1);
//Fetch the required result set
$rs = @mysql_query($this->sql . " LIMIT {$this->offset}, {$this->rows_per_site}" );
if (! $rs) {
if ($this->debug)
echo "Pagination query failed. Check your query.<br /><br />Error Returned: " . mysql_error();
return false;
}
return $rs;
}
/**
* Display the link to the first site
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to 'First'
* @return string
*/
function renderFirst($tag = 'Pierwsza') {
if ($this->total_rows == 0)
return FALSE;
if ($this->site == 1) {
return "$tag";
} else {
return '<a href="' . $this->php_self . '?site=1&' . $this->append . '">' . $tag . '</a> ';
}
}
/**
* Display the link to the last site
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to 'Last'
* @return string
*/
function renderLast($tag = 'Ostatnia') {
if ($this->total_rows == 0)
return FALSE;
if ($this->site == $this->max_sites) {
return '';
} else {
return '<span class="site_link"> <a href="' . $this->php_self . '?site=' . $this->max_sites . '&' . $this->append . '">' . $this->max_sites . '</a></span>';
}
}
/**
* Display the next link
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to '>>'
* @return string
*/
function renderNext($tag = '...') {
if ($this->total_rows == 0)
return FALSE;
if ($this->site < $this->max_sites) {
return '<span class="site_link">'. $tag .'</span>';
} else {
return '';
}
}
/**
* Display the previous link
*
* @access public
* @param string $tag Text string to be displayed as the link. Defaults to '<<'
* @return string
*/
function renderPrev($tag = '<<') {
if ($this->total_rows == 0)
return FALSE;
}
/**
* Display the site links
*
* @access public
* @return string
*/
function renderNav($prefix = '<span class="site_link">', $suffix = '</span>') {
if ($this->total_rows == 0)
return FALSE;
$batch = ceil($this->site / $this->links_per_site );
$end = $batch * $this->links_per_site;
if ($end == $this->site) {
//$end = $end + $this->links_per_site - 1;
//$end = $end + ceil($this->links_per_site/2);
}
if ($end > $this->max_sites) {
$end = $this->max_sites;
}
$start = $end - $this->links_per_site + 1;
$links = '';
for($i = $start; $i <= $end; $i ++) {
if ($i == $this->site) {
$links .= $prefix . "$i" . $suffix;
} else {
$links .= '' . $prefix . '<a href="' . $this->php_self . '?site=' . $i . '&' . $this->append . '">' . $i . '</a>' . $suffix . ' ';
}
}
return $links;
}
/**
* Display full pagination navigation
*
* @access public
* @return string
*/
function renderFullNav() {
return $this->renderFirst() . ' ' . $this->renderPrev() . ' ' . $this->renderNav() . ' ' . $this->renderNext() . ' ' . $this->renderLast();
}
/**
* Set debug mode
*
* @access public
* @param bool $debug Set to TRUE to enable debug messages
* @return void
*/
function setDebug($debug) {
$this->debug = $debug;
}
}
?>