login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Navigatie systemen > Navigatie voor Array/Mysql/...

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:

  1. <?php
  2. class navigation{
  3.  
  4. var $iTotal;
  5. var $iPerPage;
  6. var $iPageNumber;
  7. var $sGet;
  8. var $sGetExtra;
  9. var $aPage = array();
  10. var $bReturn = false;
  11.  
  12. function navigation($iTotal, $iPerPage, $sPageNumber = 'page'){
  13.  
  14. $this->iTotal = $iTotal;
  15. $this->iPerPage = $iPerPage;
  16. $this->iPageNumber = (int)((isset($_GET[$sPageNumber]) && is_numeric($_GET[$sPageNumber]) && $_GET[$sPageNumber] > 0) ? $_GET[$sPageNumber] : 1);
  17. $this->sGet = $sPageNumber;
  18.  
  19. unset($_GET[$sPageNumber]);
  20.  
  21. $aGet = array();
  22.  
  23. foreach($_GET as $sKey => $sVal){
  24.  
  25. $aGet[] = $sKey.'='.$sVal;
  26. }
  27.  
  28. $this->sGetExtra = implode($aGet, '&').((count($aGet) > 0) ? '&' : '');
  29.  
  30. return true;
  31. }
  32.  
  33. function return_navigation(){
  34.  
  35. $aPage = array();
  36.  
  37. // Go to first & go to previous
  38. $aPage['first'] =
  39. 'link' => (($this->iPageNumber > 1) ? true : false),
  40. 'number' => 1
  41. );
  42.  
  43. $aPage['prev'] =
  44. 'link' => (($this->iPageNumber > 1) ? true : false),
  45. 'number' => ($this->iPageNumber-1)
  46. );
  47.  
  48. // Other page numbers
  49. $iMax = ceil($this->iTotal/$this->iPerPage);
  50.  
  51. for($iNumb = 1; $iNumb <= $iMax; $iNumb++){
  52.  
  53. $aPage['numbers'][($iNumb-1)] =
  54. 'link' => (($iNumb == $this->iPageNumber) ? false : true),
  55. 'number' => $iNumb
  56. );
  57. }
  58.  
  59. // Go to last & go to next
  60. $aPage['last'] =
  61. 'link' => (($this->iPageNumber < $iMax) ? true : false),
  62. 'number' => $iMax
  63. );
  64.  
  65. $aPage['next'] =
  66. 'link' => (($this->iPageNumber < $iMax) ? true : false),
  67. 'number' => ($this->iPageNumber+1)
  68. );
  69.  
  70. $this->aPage = $aPage;
  71. $this->bReturn = true;
  72.  
  73. return $aPage;
  74. }
  75.  
  76. function show_navigation(){
  77.  
  78. if($this->bReturn === false){
  79.  
  80. $this->return_navigation();
  81. }
  82.  
  83. // Link for first
  84. if($this->aPage['first']['link'] === true){
  85.  
  86. $sReturn = '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['first']['number'].'"><<</a> ';
  87. }
  88. else{
  89.  
  90. $sReturn = '<b><<</b> ';
  91. }
  92.  
  93. // Link for previous
  94. if($this->aPage['prev']['link'] === true){
  95.  
  96. $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['prev'].'"><</a> ';
  97. }
  98. else{
  99.  
  100. $sReturn .= '<b><</b> ';
  101. }
  102.  
  103. // Link for page numbers
  104. $iCount = count($this->aPage['numbers']);
  105.  
  106. for($iNumb = 0; $iNumb < $iCount; $iNumb++){
  107.  
  108. if($this->aPage['numbers'][$iNumb]['link'] === true){
  109.  
  110. $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['numbers'][$iNumb]['number'].'">'.$this->aPage['numbers'][$iNumb]['number'].'</a> ';
  111. }
  112. else{
  113.  
  114. $sReturn .= '<b>'.$this->aPage['numbers'][$iNumb]['number'].'</b> ';
  115. }
  116. }
  117.  
  118. // Link for next
  119. if($this->aPage['next']['link'] === true){
  120.  
  121. $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['next']['number'].'">></a> ';
  122. }
  123. else{
  124.  
  125. $sReturn .= '<b>></b> ';
  126. }
  127.  
  128. // Link for last
  129. if($this->aPage['last']['link'] === true){
  130.  
  131. $sReturn .= '<a href="?'.$this->sGetExtra.$this->sGet.'='.$this->aPage['last']['number'].'">>></a> ';
  132. }
  133. else{
  134.  
  135. $sReturn .= '<b>>></b> ';
  136. }
  137.  
  138. return $sReturn;
  139. }
  140.  
  141. function return_min_max(){
  142.  
  143. $iMin = ($this->iPageNumber-1) * $this->iPerPage;
  144. $iMax = ($this->iPageNumber) * $this->iPerPage;
  145.  
  146. return
  147. 'min' => $iMin,
  148. 'max' => $iMax,
  149. 'perpage' => $this->iPerPage
  150. );
  151. }
  152. }
  153. ?>



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:
  1. <?php
  2. // De test array
  3. $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');
  4.  
  5. // De class aanroepen
  6. // navigation("aantal gegevens", "aantal gegevens per pagina", "hoe moet de url noemen (standaard page dus ?page= in de url)")
  7. $aNavigation = new navigation(count($aTest), 4);
  8.  
  9. // Deze functie returned de minimum en de maximum waarde voor bijvoorbeeld een array.
  10. // Ook kan je het aantal gegevens per pagina aanroepen zodat je dit maar op een plaats
  11. // moet weizigen als je dit wenst.
  12. // De functie returned een array zoals hieronder:
  13. // array(
  14. // 'min' => "hier de minimum waarde"
  15. // 'max' => "hier de maximum waarde"
  16. // 'perpage' => "hier het aantal gegevens per pagina"
  17. // Hieronder zie je een voorbeeld:
  18. $aMinMax = $aNavigation->return_min_max();
  19.  
  20. for($iNumb = $aMinMax['min']; $iNumb < $aMinMax['max']; $iNumb++){
  21.  
  22. echo ((isset($aTest[$iNumb])) ? $aTest[$iNumb].'<br />' : '');
  23. }
  24.  
  25. // Deze functie returned de navigatie zelf in de vorm van:
  26. // << < 1 2 3 4 > >>
  27. echo $aNavigation->show_navigation();
  28.  
  29. // Als de vorige functie niet de gewenste output geeft heb ik er nog een functie bijgezet dat je
  30. // gewoon met arrays je eigen ding kan maken. Bekijk het maar eens, gebruik var_dump om de uitkomst
  31. // te zien. Het is een fijne functie om wat mee te spelen, je eigen ding te maken.
  32. // 'link' => true wilt zeggen dat het een link moet zijn
  33. // 'link' => false wilt zeggen dat het geen link moet zijn, dus bijvoorbeeld onderlijnd of bold of ...
  34. // Indien er nog vragen zijn zet het maar in de reacties
  35. var_dump($aNavigation->return_navigation());
  36.  
  37. // De uitkomst van deze functie in dit voorbeeld is:
  38. /*
  39. array(5) {
  40.   ["first"]=>
  41.   array(2) {
  42.   ["link"]=>
  43.   bool(true)
  44.   ["number"]=>
  45.   int(1)
  46.   }
  47.   ["prev"]=>
  48.   array(2) {
  49.   ["link"]=>
  50.   bool(true)
  51.   ["number"]=>
  52.   int(3)
  53.   }
  54.   ["numbers"]=>
  55.   array(8) {
  56.   [0]=>
  57.   array(2) {
  58.   ["link"]=>
  59.   bool(true)
  60.   ["number"]=>
  61.   int(1)
  62.   }
  63.   [1]=>
  64.   array(2) {
  65.   ["link"]=>
  66.   bool(true)
  67.   ["number"]=>
  68.   int(2)
  69.   }
  70.   [2]=>
  71.   array(2) {
  72.   ["link"]=>
  73.   bool(true)
  74.   ["number"]=>
  75.   int(3)
  76.   }
  77.   [3]=>
  78.   array(2) {
  79.   ["link"]=>
  80.   bool(false)
  81.   ["number"]=>
  82.   int(4)
  83.   }
  84.   [4]=>
  85.   array(2) {
  86.   ["link"]=>
  87.   bool(true)
  88.   ["number"]=>
  89.   int(5)
  90.   }
  91.   [5]=>
  92.   array(2) {
  93.   ["link"]=>
  94.   bool(true)
  95.   ["number"]=>
  96.   int(6)
  97.   }
  98.   [6]=>
  99.   array(2) {
  100.   ["link"]=>
  101.   bool(true)
  102.   ["number"]=>
  103.   int(7)
  104.   }
  105.   [7]=>
  106.   array(2) {
  107.   ["link"]=>
  108.   bool(true)
  109.   ["number"]=>
  110.   int(8)
  111.   }
  112.   }
  113.   ["last"]=>
  114.   array(2) {
  115.   ["link"]=>
  116.   bool(true)
  117.   ["number"]=>
  118.   float(8)
  119.   }
  120.   ["next"]=>
  121.   array(2) {
  122.   ["link"]=>
  123.   bool(true)
  124.   ["number"]=>
  125.   int(5)
  126.   }
  127. }
  128. */
  129. ?>

Download code! Download code (.txt)

 Stemmen
Niet ingelogd

 Reacties
Post een reactie
Lees de reacties  ( 1 )
© 2002-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.128s