login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Navigatie systemen > Navigatie Class

Navigatie Class

Auteur: Gizmo - 15 mei 2007 - 21:49 - Gekeurd door: Stijn - Hits: 4824 - Aantal punten: 3.88 (4 stemmen)



Ik kon maar geen goede navigatie klasse vinden en daarom heb ik er zelf een gemaakt. Ik ben er zo blij mee dat ik hem graag met jullie wil delen. Als er nog foutjes in zitten hoor ik dat graag, bij mij werkt hij in ieder geval. Uitleg staat in de code.

Voor dit script heb ik gebruik gemaakt van deze tutorial van FangorN.

Voor vragen en/of opmerkingen pm me maar 

Code:
Je roept hem als volgt aan (als voorbeeld gebruik ik even een gastenboek):

  1. <?php
  2.  
  3. //////////////////////////////////////////////////
  4. // Eerst maken roepen we de klasse aan. Je moet
  5. // hier meegeven uit welke tabel je zometeen de
  6. // gegevens wil halen en hoeveel berichten je op
  7. // een pagina wil, in dit geval uit de tabel
  8. // gastenboek en 20 berichten per pagina
  9. //////////////////////////////////////////////////
  10. require("navigatie.class.php");
  11. $ng = new Navigatie("gastenboek", 20);
  12.  
  13. /////////////////////////////////////////////////
  14. // Nu halen we de gegevens op uit de database,
  15. // met de offset en limit die in de klasse
  16. // berekend worden
  17. /////////////////////////////////////////////////
  18. $sql = "SELECT * FROM gastenboek ORDER BY id DESC LIMIT ".$ng->offset().",".$ng->items_per_pagina()."";
  19. $res = mysql_query($sql) or die (mysql_error());
  20. while ($show = mysql_fetch_object($res))
  21. {
  22. // Doe iets op de opgehaalde gegevens
  23. }
  24. /////////////////////////////////////////////////
  25. // Even het resultaat vrijgeven
  26. /////////////////////////////////////////////////
  27.  
  28. /////////////////////////////////////////////////
  29. // De links naar de volgende pagina's weergeven
  30. /////////////////////////////////////////////////
  31. echo $ng->links();
  32.  
  33. ?>


navigatie.class.php
  1. <?php
  2. /**
  3.  * @class: Deze klasse maakt een pagina systeem voor als je inhoud uit
  4.  * de database laat zien. Zo heb je niet alles onder elkaar
  5.  * staan, maar houdt je alles overzichtelijk met meerdere
  6.  * pagina's
  7.  * @author: Gizmo (Dave Lemmens)
  8.  * @version: v1.0
  9.  * @copyright: (c)2007 Gizmo
  10.  */
  11. class Navigatie
  12. {
  13. //////////////////////////////////////////////////
  14. // De tabel waaruit de waardes straks worden getoond
  15. //////////////////////////////////////////////////
  16. private $tabel;
  17. //////////////////////////////////////////////////
  18. // Het aantal items per pagina
  19. //////////////////////////////////////////////////
  20. private $items_per_pagina;
  21. //////////////////////////////////////////////////
  22. // Het aantal pagina's
  23. //////////////////////////////////////////////////
  24. private $aantal_paginas;
  25. //////////////////////////////////////////////////
  26. // De huidge pagina waarop de bezoeker is
  27. //////////////////////////////////////////////////
  28. private $huidig;
  29. //////////////////////////////////////////////////
  30. // De offset voor de uiteindelijke query
  31. //////////////////////////////////////////////////
  32. private $offset;
  33.  
  34. /**
  35.   * @function: Constructor: zet de variabelen goed
  36.   * @param: $tabel: de tabel waaruit de waardes straks worden weergegeven
  37.   * $items_per_pagina: het aantal items dat op een pagina getoond moet worden
  38.   */
  39. public function Navigatie($tabel, $items_per_pagina)
  40. {
  41. $this->tabel = $tabel;
  42. $this->items_per_pagina = $items_per_pagina;
  43. $this->aantal_paginas = $this->count_paginas();
  44. $this->huidig = $this->get_huidig();
  45. $this->offset = $this->get_offset();
  46. }
  47.  
  48. /**
  49.   * @function: geeft de offset terug
  50.   * @return: de offset
  51.   */
  52. public function offset()
  53. {
  54. return $this->offset;
  55. }
  56.  
  57. /**
  58.   * @function: geeft het aantal items per pagina terug
  59.   * @return: het aantal items per pagina
  60.   */
  61. public function items_per_pagina()
  62. {
  63. return $this->items_per_pagina;
  64. }
  65.  
  66. /**
  67.   * @function: zet de nodige variabelen goed
  68.   * @param: $tabel: de tabel waaruit de waardes straks worden weergegeven
  69.   * $items_per_pagina: het aantal items dat op een pagina getoond moet worden
  70.   * @return: void
  71.   */
  72. public function set($tabel, $items_per_pagina)
  73. {
  74. //////////////////////////////////////////////////
  75. // Variabelen goed zetten
  76. //////////////////////////////////////////////////
  77. $this->tabel = $tabel;
  78. $this->items_per_pagina = $items_per_pagina;
  79.  
  80. //////////////////////////////////////////////////
  81. // Aantal pagina's en de offset berekenen en de
  82. // huidige pagina opzoeken
  83. //////////////////////////////////////////////////
  84. $this->aantal_paginas = $this->count_paginas();
  85. $this->huidig = $this->get_huidig();
  86. $this->offset = $this->get_offset();
  87. }
  88.  
  89. /**
  90.   * @function: berekent het totaal aantal paginas
  91.   * @return: het totale aantal paginas
  92.   */
  93. private function count_paginas()
  94. {
  95. $sql = "SELECT COUNT(id) FROM ".$this->tabel."";
  96. $res = mysql_query($sql) or die (mysql_error());
  97. $aantal_items = mysql_result($res, 0);
  98. $paginas = ceil($aantal_items / $this->items_per_pagina);
  99. return $paginas;
  100. }
  101.  
  102. /**
  103.   * @function: kijkt op welke pagina de bezoeker nu is.
  104.   * @return: de pagina waarop de bezoeker nu is
  105.   */
  106. private function get_huidig()
  107. {
  108. //////////////////////////////////////////////////
  109. // We beginnen op 0, voor als de bezoeker nog
  110. // niet op een volgende pagina is, of voor als
  111. // de $_GET geen geldige waarde bevat
  112. //////////////////////////////////////////////////
  113. $huidige_pagina = 0;
  114.  
  115. //////////////////////////////////////////////////
  116. // Kijken op welke pagina de bezoeker is en
  117. // meteen controleren of het een geldige waarde is
  118. //////////////////////////////////////////////////
  119. if(isset($_GET['p']) && is_numeric($_GET['p']) && $_GET['p'] > 0 && $_GET['p'] < $this->aantal_paginas)
  120. {
  121. $huidige_pagina = $_GET['p'];
  122. }
  123.  
  124. return $huidige_pagina;
  125. }
  126.  
  127. /**
  128.   * @function: berekend de offset voor de uiteindelijke query
  129.   * @return: de offset voor de uiteindelijke query
  130.   */
  131. private function get_offset()
  132. {
  133. $offset = $this->huidig * $this->items_per_pagina;
  134. return $offset;
  135. }
  136.  
  137. /**
  138.   * @function: Deze functie maakt de navigatie links
  139.   * @return: de navigatie links
  140.   */
  141. public function links()
  142. {
  143. //////////////////////////////////////////////////
  144. // Eerst bepalen we de url. Hiervoor maken we
  145. // gebruik van de functie querystring()
  146. //////////////////////////////////////////////////
  147. $q = $_SERVER['PHP_SELF'].$this->querystring("p");
  148.  
  149. //////////////////////////////////////////////////
  150. // Nu maken we de vorige knop
  151. //////////////////////////////////////////////////
  152. if ($this->huidig > 0)
  153. {
  154. $out .= " <a href='".$q."p=".($this->huidig - 1)."'>Vorige</a> ";
  155. }
  156.  
  157. //////////////////////////////////////////////////
  158. // We maken de navigatie met behulp van een
  159. // select. Als er op een paginanummer geklikt
  160. // wordt, wordt je meteen naar de pagina gestuurd
  161. //////////////////////////////////////////////////
  162. if ($this->aantal_paginas > 1)
  163. {
  164. $out .= "<select name='navigatie'>\n";
  165. for ($i = 0; $i < $this->aantal_paginas; $i++)
  166. {
  167. $out .= "<option value='".$i."' onClick='JavaScript:window.location=\"".$q."p=".$i."\"' ";
  168. //////////////////////////////////////////////////
  169. // De huidige pagina moet geselecteerd zijn
  170. //////////////////////////////////////////////////
  171. if ($this->huidig == $i)
  172. {
  173. $out .= "selected='selected'";
  174. }
  175. $out .= ">".($i+1)."</option>";
  176. }
  177. $out .= "</select>\n";
  178. }
  179.  
  180. //////////////////////////////////////////////////
  181. // Nu maken we de volgende knop
  182. //////////////////////////////////////////////////
  183. if ($this->huidig < ($this->aantal_paginas - 1))
  184. {
  185. $out .= " <a href='".$q."p=".($this->huidig + 1)."'>Volgende</a>";
  186. }
  187.  
  188. return $out;
  189. }
  190.  
  191. /**
  192.   * @function: maakt de url door te kijken welke $_GET waardes er
  193.   * al in staan, zodat deze niet verloren gaan
  194.   * @param: $nav_var: de variabele die het paginanummer aangeeft
  195.   * @return: de juiste querystring
  196.   */
  197. private function querystring($nav_var)
  198. {
  199. //////////////////////////////////////////////////
  200. // We beginnen met een ? in de string
  201. //////////////////////////////////////////////////
  202. $qstring = "?";
  203.  
  204. //////////////////////////////////////////////////
  205. // Nu kijken we of er meerdere queryvariabelen
  206. //zijn
  207. //////////////////////////////////////////////////
  208. if(sizeof($_GET) > 1 || !in_array($nav_var, array_keys($_GET)))
  209. {
  210. //////////////////////////////////////////////////
  211. // De string aanvullen met de variabelen die in
  212. // de url staan
  213. //////////////////////////////////////////////////
  214. foreach($_GET as $k => $v)
  215. {
  216. if($k != $nav_var)
  217. {
  218. $qstring .= $k."=".$v."&amp;";
  219. }
  220. }
  221. }
  222.  
  223. return $qstring;
  224. }
  225. }
  226. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (6)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.044s