Ho visto tanti 3d aperti con tantissimi post per risolvere il problema della paginazione.
Con questa classe dovreste trovare tutto molto semplice:
Cosa serve?
Solo il file che chiameremo php.sql.pager.class (nome indicativo) con questo contenuto:
Codice PHP:
class _makePager {
var $limit;
var $page;
var $numPages;
var $offset;
var $sql;
var $menu;
function _makePager ( $limit ) {
$this->limit = $limit;
}
function _getPagerData ( $numHits, $page ) {
$numHits = (int) $numHits;
$this->limit = max((int) $this->limit, 1);
$this->page = (int) $page;
$this->numPages = ceil($numHits / $this->limit);
$this->page = max($this->page, 1);
$this->page = min($this->page, $this->numPages);
$this->offset = ($this->page - 1) * $this->limit;
$this->sql = " LIMIT ".$this->offset.", ".$this->limit;
$this->_makeMenu();
}
function _makeMenu () {
if ($this->numPages>1) {
if ($this->page>1) $this->menu['PREVIOUS'] = ($this->page-1);
for ($i=1; $i<=$this->numPages; $i++) {
if ($i == $this->page) $this->menu['PAGES'][] = array (
'ID' => $i,
'STATUS' => false
);
else $this->menu['PAGES'][] = array (
'ID' => $i,
'STATUS' => true
);
}
if ($this->page<$this->numPages) $this->menu['NEXT'] = ($this->page+1);
}
}
function _getUri ( $_pagevar ) {
$_getvars = $_SERVER["QUERY_STRING"];
$_url = $_SERVER["PHP_SELF"]."?";
$_getvars = explode( "&", $_getvars );
for ($i=0; $i!=count($_getvars); $i++) {
list ($key, $value) = explode( "=", $_getvars[$i] );
if (($key)&&($value)) if ($key!=$_pagevar) $_url.= "{$key}={$value}&";
}
return "{$_url}{$_pagevar}=";
}
}
Nel prossimo post vedremo come funziona!