|
Navigatie voor Array/Mysql/...
Auteur: Stijn1
- 14 januari 2007 - 16:20 - Gekeurd door: Joel
- Hits: 1962 - Aantal punten:
(0 stemmen)
Omdat ik me de laatste tijd verveelde heb ik een navigatie systeem gemaakt. In class vorm geschreven voor php 4 en met error_reporting(E_ALL).
|
| Code: |
<?php
class navigation{
var $iTotal;
var $iPerPage;
var $iPageNumber;
var $sGet;
var $sGetExtra;
var $aPage = array();
var $bReturn = false;
function navigation($iTotal, $iPerPage, $sPageNumber = 'page'){
$this->iTotal = $iTotal;
$this->iPerPage = $iPerPage;
$this->iPageNumber = (int)((isset($_GET[$sPageNumber]) && is_numeric($_GET[$sPageNumber]) && $_GET[$sPageNumber] > 0) ? $_GET[$sPageNumber] : 1);
$this->sGet = $sPageNumber;
unset($_GET[$sPageNumber]);
$aGet = array();
foreach($_GET as $sKey => $sVal){
$aGet[] = $sKey.'='.$sVal;
}
$this->sGetExtra = implode($aGet, '&').((count($aGet) > 0) ? '&' : '');
return true;
}
function return_navigation(){
$aPage = array();
// Go to first & go to previous
$aPage['first'] =
array(
'link' => (($this->iPageNumber > 1) ? true : false),
'number' => 1
);
$aPage['prev'] =
array(
'link' => (($this->iPageNumber > 1) ? true : false),
'number' => ($this->iPageNumber-1)
);
// Other page numbers
$iMax = ceil($this->iTotal/$this->iPerPage);
for($iNumb = 1; $iNumb <= $iMax; $iNumb++){
$aPage['numbers'][($iNumb-1)] =
array(
'link' => (($iNumb == $this->iPageNumber) ? false : true),
'number' => $iNumb
);
}
// Go to last & go to next
$aPage['last'] =
array(
'link' => (($this->iPageNumber < $iMax) ? true : false),
'number' => $iMax
);
$aPage['next'] =
array(
'link' => (($this->iPageNumber < $iMax) ? true : false),
'number' => ($this->iPageNumber+1)
);
$this->aPage = $aPage;
$this->bReturn = true;
return $aPage;
}
function show_navigation(){
if($this->bReturn === false){
$this->return_navigation();
}
// Link for first
if($this->aPage['first']['link'] === true){
$sReturn = '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['first']['number'].'"><<</a> ';
}
else{
$sReturn = '<b><<</b> ';
}
// Link for previous
if($this->aPage['prev']['link'] === true){
$sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['prev'].'"><</a> ';
}
else{
$sReturn .= '<b><</b> ';
}
// Link for page numbers
$iCount = count($this->aPage['numbers']);
for($iNumb = 0; $iNumb < $iCount; $iNumb++){
if($this->aPage['numbers'][$iNumb]['link'] === true){
$sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['numbers'][$iNumb]['number'].'">'.$this->aPage['numbers'][$iNumb]['number'].'</a> ';
}
else{
$sReturn .= '<b>'.$this->aPage['numbers'][$iNumb]['number'].'</b> ';
}
}
// Link for next
if($this->aPage['next']['link'] === true){
$sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['next']['number'].'">></a> ';
}
else{
$sReturn .= '<b>></b> ';
}
// Link for last
if($this->aPage['last']['link'] === true){
$sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['last']['number'].'">>></a> ';
}
else{
$sReturn .= '<b>>></b> ';
}
return $sReturn;
}
function return_min_max(){
$iMin = ($this->iPageNumber-1) * $this->iPerPage;
$iMax = ($this->iPageNumber) * $this->iPerPage;
return
array(
'min' => $iMin,
'max' => $iMax,
'perpage' => $this->iPerPage
);
}
}
?>
<?php class navigation{ var $iTotal; var $iPerPage; var $iPageNumber; var $sGet; var $sGetExtra; var $bReturn = false; function navigation($iTotal, $iPerPage, $sPageNumber = 'page'){ $this->iTotal = $iTotal; $this->iPerPage = $iPerPage; $this->iPageNumber = (int )((isset($_GET[$sPageNumber]) && is_numeric($_GET[$sPageNumber]) && $_GET[$sPageNumber] > 0) ? $_GET[$sPageNumber] : 1); $this->sGet = $sPageNumber; unset($_GET[$sPageNumber]); foreach($_GET as $sKey => $sVal){ $aGet[] = $sKey.'='.$sVal; } $this->sGetExtra = implode($aGet, '&').((count($aGet) > 0) ? '&' : ''); return true; } function return_navigation(){ // Go to first & go to previous $aPage['first'] = 'link' => (($this->iPageNumber > 1) ? true : false), 'number' => 1 ); $aPage['prev'] = 'link' => (($this->iPageNumber > 1) ? true : false), 'number' => ($this->iPageNumber-1) ); // Other page numbers $iMax = ceil($this->iTotal/$this->iPerPage); for($iNumb = 1; $iNumb <= $iMax; $iNumb++){ $aPage['numbers'][($iNumb-1)] = 'link' => (($iNumb == $this->iPageNumber) ? false : true), 'number' => $iNumb ); } // Go to last & go to next $aPage['last'] = 'link' => (($this->iPageNumber < $iMax) ? true : false), 'number' => $iMax ); $aPage['next'] = 'link' => (($this->iPageNumber < $iMax) ? true : false), 'number' => ($this->iPageNumber+1) ); $this->aPage = $aPage; $this->bReturn = true; return $aPage; } function show_navigation(){ if($this->bReturn === false){ $this->return_navigation(); } // Link for first if($this->aPage['first']['link'] === true){ $sReturn = '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['first']['number'].'"><<</a> '; } else{ $sReturn = '<b><<</b> '; } // Link for previous if($this->aPage['prev']['link'] === true){ $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['prev'].'"><</a> '; } else{ $sReturn .= '<b><</b> '; } // Link for page numbers $iCount = count($this->aPage['numbers']); for($iNumb = 0; $iNumb < $iCount; $iNumb++){ if($this->aPage['numbers'][$iNumb]['link'] === true){ $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['numbers'][$iNumb]['number'].'">'.$this->aPage['numbers'][$iNumb]['number'].'</a> '; } else{ $sReturn .= '<b>'.$this->aPage['numbers'][$iNumb]['number'].'</b> '; } } // Link for next if($this->aPage['next']['link'] === true){ $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['next']['number'].'">></a> '; } else{ $sReturn .= '<b>></b> '; } // Link for last if($this->aPage['last']['link'] === true){ $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['last']['number'].'">>></a> '; } else{ $sReturn .= '<b>>></b> '; } return $sReturn; } function return_min_max(){ $iMin = ($this->iPageNumber-1) * $this->iPerPage; $iMax = ($this->iPageNumber) * $this->iPerPage; return 'min' => $iMin, 'max' => $iMax, 'perpage' => $this->iPerPage ); } } ?>
Zoals je ziet heeft de class 4 functies, de eerste functie navigation wordt meteen aangeroepen als je $Nav = new navigation() doet. In de volgende code vind je wat uitleg over de functies met een voorbeeld erbij:
<?php
// De test array
$aTest = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17', '18','19','20', '21','22','23','24','25','26','27','28');
// De class aanroepen
// navigation("aantal gegevens", "aantal gegevens per pagina", "hoe moet de url noemen (standaard page dus ?page= in de url)")
$aNavigation = new navigation(count($aTest), 4);
// Deze functie returned de minimum en de maximum waarde voor bijvoorbeeld een array.
// Ook kan je het aantal gegevens per pagina aanroepen zodat je dit maar op een plaats
// moet weizigen als je dit wenst.
// De functie returned een array zoals hieronder:
// array(
// 'min' => "hier de minimum waarde"
// 'max' => "hier de maximum waarde"
// 'perpage' => "hier het aantal gegevens per pagina"
// Hieronder zie je een voorbeeld:
$aMinMax = $aNavigation->return_min_max();
for($iNumb = $aMinMax['min']; $iNumb < $aMinMax['max']; $iNumb++){
echo ((isset($aTest[$iNumb])) ? $aTest[$iNumb].'<br />' : '');
}
// Deze functie returned de navigatie zelf in de vorm van:
// << < 1 2 3 4 > >>
echo $aNavigation->show_navigation();
// Als de vorige functie niet de gewenste output geeft heb ik er nog een functie bijgezet dat je
// gewoon met arrays je eigen ding kan maken. Bekijk het maar eens, gebruik var_dump om de uitkomst
// te zien. Het is een fijne functie om wat mee te spelen, je eigen ding te maken.
// 'link' => true wilt zeggen dat het een link moet zijn
// 'link' => false wilt zeggen dat het geen link moet zijn, dus bijvoorbeeld onderlijnd of bold of ...
// Indien er nog vragen zijn zet het maar in de reacties
var_dump($aNavigation->return_navigation());
// De uitkomst van deze functie in dit voorbeeld is:
/*
array(5) {
["first"]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(1)
}
["prev"]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(3)
}
["numbers"]=>
array(8) {
[0]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(1)
}
[1]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(2)
}
[2]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(3)
}
[3]=>
array(2) {
["link"]=>
bool(false)
["number"]=>
int(4)
}
[4]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(5)
}
[5]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(6)
}
[6]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(7)
}
[7]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(8)
}
}
["last"]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
float(8)
}
["next"]=>
array(2) {
["link"]=>
bool(true)
["number"]=>
int(5)
}
}
*/
?>
<?php // De test array $aTest = array('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17', '18','19','20', '21','22','23','24','25','26','27','28'); // De class aanroepen // navigation("aantal gegevens", "aantal gegevens per pagina", "hoe moet de url noemen (standaard page dus ?page= in de url)") $aNavigation = new navigation (count($aTest), 4); // Deze functie returned de minimum en de maximum waarde voor bijvoorbeeld een array. // Ook kan je het aantal gegevens per pagina aanroepen zodat je dit maar op een plaats // moet weizigen als je dit wenst. // De functie returned een array zoals hieronder: // array( // 'min' => "hier de minimum waarde" // 'max' => "hier de maximum waarde" // 'perpage' => "hier het aantal gegevens per pagina" // Hieronder zie je een voorbeeld: $aMinMax = $aNavigation->return_min_max(); for($iNumb = $aMinMax['min']; $iNumb < $aMinMax['max']; $iNumb++){ echo ((isset($aTest[$iNumb])) ? $aTest[$iNumb].'<br />' : ''); } // Deze functie returned de navigatie zelf in de vorm van: // << < 1 2 3 4 > >> echo $aNavigation->show_navigation(); // Als de vorige functie niet de gewenste output geeft heb ik er nog een functie bijgezet dat je // gewoon met arrays je eigen ding kan maken. Bekijk het maar eens, gebruik var_dump om de uitkomst // te zien. Het is een fijne functie om wat mee te spelen, je eigen ding te maken. // 'link' => true wilt zeggen dat het een link moet zijn // 'link' => false wilt zeggen dat het geen link moet zijn, dus bijvoorbeeld onderlijnd of bold of ... // Indien er nog vragen zijn zet het maar in de reacties var_dump($aNavigation->return_navigation()); // De uitkomst van deze functie in dit voorbeeld is: /* array(5) { ["first"]=> array(2) { ["link"]=> bool(true) ["number"]=> int(1) } ["prev"]=> array(2) { ["link"]=> bool(true) ["number"]=> int(3) } ["numbers"]=> array(8) { [0]=> array(2) { ["link"]=> bool(true) ["number"]=> int(1) } [1]=> array(2) { ["link"]=> bool(true) ["number"]=> int(2) } [2]=> array(2) { ["link"]=> bool(true) ["number"]=> int(3) } [3]=> array(2) { ["link"]=> bool(false) ["number"]=> int(4) } [4]=> array(2) { ["link"]=> bool(true) ["number"]=> int(5) } [5]=> array(2) { ["link"]=> bool(true) ["number"]=> int(6) } [6]=> array(2) { ["link"]=> bool(true) ["number"]=> int(7) } [7]=> array(2) { ["link"]=> bool(true) ["number"]=> int(8) } } ["last"]=> array(2) { ["link"]=> bool(true) ["number"]=> float(8) } ["next"]=> array(2) { ["link"]=> bool(true) ["number"]=> int(5) } } */ ?>
Download code (.txt)
|
|
Stemmen |
| Niet ingelogd |
|