<?php
/**
* @class: Deze klasse maakt een pagina systeem voor als je inhoud uit
* de database laat zien. Zo heb je niet alles onder elkaar
* staan, maar houdt je alles overzichtelijk met meerdere
* pagina's
* @author: Gizmo (Dave Lemmens)
* @version: v1.0
* @copyright: (c)2007 Gizmo
*/
class Navigatie
{
//////////////////////////////////////////////////
// De tabel waaruit de waardes straks worden getoond
//////////////////////////////////////////////////
private $tabel;
//////////////////////////////////////////////////
// Het aantal items per pagina
//////////////////////////////////////////////////
private $items_per_pagina;
//////////////////////////////////////////////////
// Het aantal pagina's
//////////////////////////////////////////////////
private $aantal_paginas;
//////////////////////////////////////////////////
// De huidge pagina waarop de bezoeker is
//////////////////////////////////////////////////
private $huidig;
//////////////////////////////////////////////////
// De offset voor de uiteindelijke query
//////////////////////////////////////////////////
private $offset;
/**
* @function: Constructor: zet de variabelen goed
* @param: $tabel: de tabel waaruit de waardes straks worden weergegeven
* $items_per_pagina: het aantal items dat op een pagina getoond moet worden
*/
public function Navigatie($tabel, $items_per_pagina)
{
$this->tabel = $tabel;
$this->items_per_pagina = $items_per_pagina;
$this->aantal_paginas = $this->count_paginas();
$this->huidig = $this->get_huidig();
$this->offset = $this->get_offset();
}
/**
* @function: geeft de offset terug
* @return: de offset
*/
public function offset()
{
return $this->offset;
}
/**
* @function: geeft het aantal items per pagina terug
* @return: het aantal items per pagina
*/
public function items_per_pagina()
{
return $this->items_per_pagina;
}
/**
* @function: zet de nodige variabelen goed
* @param: $tabel: de tabel waaruit de waardes straks worden weergegeven
* $items_per_pagina: het aantal items dat op een pagina getoond moet worden
* @return: void
*/
public function set($tabel, $items_per_pagina)
{
//////////////////////////////////////////////////
// Variabelen goed zetten
//////////////////////////////////////////////////
$this->tabel = $tabel;
$this->items_per_pagina = $items_per_pagina;
//////////////////////////////////////////////////
// Aantal pagina's en de offset berekenen en de
// huidige pagina opzoeken
//////////////////////////////////////////////////
$this->aantal_paginas = $this->count_paginas();
$this->huidig = $this->get_huidig();
$this->offset = $this->get_offset();
}
/**
* @function: berekent het totaal aantal paginas
* @return: het totale aantal paginas
*/
private function count_paginas()
{
$sql = "SELECT COUNT(id) FROM ".$this->tabel."";
$paginas = ceil($aantal_items / $this->items_per_pagina); return $paginas;
}
/**
* @function: kijkt op welke pagina de bezoeker nu is.
* @return: de pagina waarop de bezoeker nu is
*/
private function get_huidig()
{
//////////////////////////////////////////////////
// We beginnen op 0, voor als de bezoeker nog
// niet op een volgende pagina is, of voor als
// de $_GET geen geldige waarde bevat
//////////////////////////////////////////////////
$huidige_pagina = 0;
//////////////////////////////////////////////////
// Kijken op welke pagina de bezoeker is en
// meteen controleren of het een geldige waarde is
//////////////////////////////////////////////////
if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $this->aantal_paginas) {
$huidige_pagina = $_GET['p'];
}
return $huidige_pagina;
}
/**
* @function: berekend de offset voor de uiteindelijke query
* @return: de offset voor de uiteindelijke query
*/
private function get_offset()
{
$offset = $this->huidig * $this->items_per_pagina;
return $offset;
}
/**
* @function: Deze functie maakt de navigatie links
* @return: de navigatie links
*/
public function links()
{
//////////////////////////////////////////////////
// Eerst bepalen we de url. Hiervoor maken we
// gebruik van de functie querystring()
//////////////////////////////////////////////////
$q = $_SERVER['PHP_SELF'].$this->querystring("p");
//////////////////////////////////////////////////
// Nu maken we de vorige knop
//////////////////////////////////////////////////
if ($this->huidig > 0)
{
$out .= " <a href='".$q."p=".($this->huidig - 1)."'>Vorige</a> ";
}
//////////////////////////////////////////////////
// We maken de navigatie met behulp van een
// select. Als er op een paginanummer geklikt
// wordt, wordt je meteen naar de pagina gestuurd
//////////////////////////////////////////////////
if ($this->aantal_paginas > 1)
{
$out .= "<select name='navigatie'>\n";
for ($i = 0; $i < $this->aantal_paginas; $i++)
{
$out .= "<option value='".$i."' onClick='JavaScript:window.location=\"".$q."p=".$i."\"' ";
//////////////////////////////////////////////////
// De huidige pagina moet geselecteerd zijn
//////////////////////////////////////////////////
if ($this->huidig == $i)
{
$out .= "selected='selected'";
}
$out .= ">".($i+1)."</option>";
}
$out .= "</select>\n";
}
//////////////////////////////////////////////////
// Nu maken we de volgende knop
//////////////////////////////////////////////////
if ($this->huidig < ($this->aantal_paginas - 1))
{
$out .= " <a href='".$q."p=".($this->huidig + 1)."'>Volgende</a>";
}
return $out;
}
/**
* @function: maakt de url door te kijken welke $_GET waardes er
* al in staan, zodat deze niet verloren gaan
* @param: $nav_var: de variabele die het paginanummer aangeeft
* @return: de juiste querystring
*/
private function querystring($nav_var)
{
//////////////////////////////////////////////////
// We beginnen met een ? in de string
//////////////////////////////////////////////////
$qstring = "?";
//////////////////////////////////////////////////
// Nu kijken we of er meerdere queryvariabelen
//zijn
//////////////////////////////////////////////////
{
//////////////////////////////////////////////////
// De string aanvullen met de variabelen die in
// de url staan
//////////////////////////////////////////////////
foreach($_GET as $k => $v)
{
if($k != $nav_var)
{
$qstring .= $k."=".$v."&";
}
}
}
return $qstring;
}
}
?>