login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Navigatie systemen > [Class] Pagina navigatie

[Class] Pagina navigatie

Auteur: jeroentjuh - 04 maart 2006 - 12:54 - Gekeurd door: nemesiskoen - Hits: 8734 - Aantal punten: 3.50 (3 stemmen)



Ik had me een tijdje rot gezocht naar een pagina navigatie class naar m'n zin, maar deze heb ik niet kunnen vinden, daarom besloot ik er zelf maar eentje te maken.

Ik heb er een voorbeeld bij gedaan en ik denk dat alles zichzelf wel uitwijst.

Code:
pagenav.class.php
  1. <?php
  2. class pageNavigation {
  3. public $url;
  4. public $max_aantal_per_pagina;
  5. public $totaal_aantal_rijen;
  6. public $totaal_aantal_paginas;
  7. public $huidige_pagina;
  8. public $standaard_sql;
  9. public $aantal_paginanummers;
  10. public $scheidingsteken;
  11. /**
  12.   * @desc de constructor die een aantal dingen instelt
  13.   * @param string de standaard sql die je gebruikt, bijv: SELECT velden FROM tabel
  14.   * @param string de count-sql, deze moet zo zijn: SELECT COUNT(1) FROM tabel
  15.   * @param integer het aantal records dat op één pagina te zien is
  16.   * @param integer de huidige pagina ($_GET['pagina'])
  17.   * @param integer het aantal cijfers dat links en rechts moet worden weergegeven langs de huidige pagina
  18.   **/
  19. public function __construct($sSql,$cSql,$max_aantal_per_pagina,$pagina = 1,$aantal_nummers_links_en_rechts) {
  20. $this->standaard_sql = $sSql;
  21. $cQuery = mysql_query($cSql);
  22. $this->totaal_aantal_rijen = mysql_result($cQuery,0,0);
  23. $this->max_aantal_per_pagina = $max_aantal_per_pagina;
  24. $this->huidige_pagina = $pagina;
  25. $this->aantal_paginanummers = $aantal_nummers_links_en_rechts;
  26. $this->totaal_aantal_paginas = ceil($this->totaal_aantal_rijen/$max_aantal_per_pagina);
  27. }
  28. public function stelUrlIn($standaard) {
  29. $this->url = $standaard;
  30. if(ereg('[?]',$standaard)) {
  31. $this->scheidingsteken = '&amp;';
  32. } else {
  33. $this->scheidingsteken = '?';
  34. }
  35. }
  36. public function geefQuery() {
  37. if($this->totaal_aantal_rijen < ($this->huidige_pagina * $this->max_aantal_per_pagina)) {
  38. $query = mysql_query($this->standaard_sql.' LIMIT 0,'.$this->max_aantal_per_pagina);
  39. $this->huidige_pagina = 1;
  40. } else {
  41. $start = (($this->huidige_pagina * $this->max_aantal_per_pagina) - $this->max_aantal_per_pagina);
  42. $sql = $this->standaard_sql.' LIMIT '.$start.','.$this->max_aantal_per_pagina;
  43. $query = mysql_query($sql);
  44. }
  45. if($query) {
  46. return $query;
  47. } else {
  48. return FALSE;
  49. }
  50. }
  51.  
  52. public function geefNummering() {
  53. $nummering = '';
  54. //de linkerkant
  55. $start_links = $this->huidige_pagina - $this->aantal_paginanummers;
  56. if($start_links <= 0) {
  57. for($l = 1; $l < $this->huidige_pagina; $l++) {
  58. if($l == 1) {
  59. $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina=1">Eerste</a> - ';
  60. } else {
  61. $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina='.$l.'">'.$l.'</a> - ';
  62. }
  63. }
  64. } else {
  65. $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina=1">Eerste</a> - ';
  66. for($l = $start_links; $l < $this->huidige_pagina; $l++) {
  67. if($l != 1) {
  68. $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina='.$l.'">'.$l.'</a> - ';
  69. }
  70. }
  71. }
  72. $nummering .= $this->huidige_pagina;
  73. //de rechterkant
  74. $start_rechts = $this->huidige_pagina + 1;
  75. $einde_rechts = $start_rechts + $this->aantal_paginanummers;
  76. for($r = $start_rechts; $r < $einde_rechts; $r++) {
  77. if($r < $this->totaal_aantal_paginas) {
  78. $nummering .= ' - <a href="'.$this->url.$this->scheidingsteken.'pagina='.$r.'">'.$r.'</a>';
  79. }
  80. if($r == $this->totaal_aantal_paginas) {
  81. $nummering .= ' - <a href="'.$this->url.$this->scheidingsteken.'pagina='.$r.'">Laatste</a>';
  82. }
  83. }
  84. if(($einde_rechts-1) < $this->totaal_aantal_paginas) {
  85. $nummering .= ' - <a href="'.$this->url.$this->scheidingsteken.'pagina='.$this->totaal_aantal_paginas.'">Laatste</a>';
  86. }
  87. return $nummering;
  88. }
  89.  
  90. }
  91. ?>


Voorbeeld.php
  1. <?php
  2. include('connect.php');
  3. if(!isset($_GET['pagina']) || !is_numeric($_GET['pagina'])) {
  4. //als er geen pagina is opgegeven is deze 1
  5. $pagina = 1;
  6. } else {
  7. $pagina = $_GET['pagina'];
  8. }
  9. //de query die je normaal gebruikt om de resultaten uit de tabel te halen
  10. $sSql = 'SELECT veld1, veld2, veld3 FROM tabel';
  11. //de query die je gebruikt om het aantal velden in de tabel te bepalen
  12. $cSql = 'SELECT COUNT(1) FROM tabel';
  13. //het maximum aantal records per pagina
  14. $marpp = 10;
  15. //het aantal paginanummers dat je onderaan wilt zien, links en rechts
  16. //bijvoorbeeld Eerste - 2 - 3 - 4 - 5 - 6 - Deze pagina - 7 - 8 - 9 - 10 -11 - Laatste
  17. $aantal_paginanummers = 5;
  18.  
  19. //de class aanroepen met de bovenstaande variabelen
  20. $pagenav = new pageNavigation($sSql, $cSql, $marpp, $pagina, $aantal_paginanummers);
  21. //geef de url van deze pagina op. NIET VERGETEN!
  22. $pagenav->stelUrlIn('voorbeeld.php');
  23. //de query met de LIMIT uitvoeren
  24. $query = $pagenav->geefQuery();
  25. //de records weergeven
  26. while($r = mysql_fetch_assoc($query)) {
  27. echo $r['test'].'<br>';
  28. }
  29. //de nummering weergeven
  30. echo $pagenav->geefNummering();
  31. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

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