pagenav.class.php

<?php
class pageNavigation {
  public $url;
  public $max_aantal_per_pagina;
  public $totaal_aantal_rijen;
  public $totaal_aantal_paginas;
  public $huidige_pagina;
  public $standaard_sql;
  public $aantal_paginanummers;
  public $scheidingsteken;
  /**
  * @desc de constructor die een aantal dingen instelt
  * @param    string    de standaard sql die je gebruikt, bijv: SELECT velden FROM tabel
  * @param    string    de count-sql, deze moet zo zijn: SELECT COUNT(1) FROM tabel
  * @param    integer   het aantal records dat op één pagina te zien is
  * @param    integer   de huidige pagina ($_GET['pagina'])
  * @param    integer   het aantal cijfers dat links en rechts moet worden weergegeven langs de huidige pagina  
  **/        
  public function __construct($sSql,$cSql,$max_aantal_per_pagina,$pagina = 1,$aantal_nummers_links_en_rechts) {
    $this->standaard_sql = $sSql;
    $cQuery = mysql_query($cSql);
    $this->totaal_aantal_rijen = mysql_result($cQuery,0,0);
    $this->max_aantal_per_pagina = $max_aantal_per_pagina;
    $this->huidige_pagina = $pagina;
    $this->aantal_paginanummers = $aantal_nummers_links_en_rechts;
    $this->totaal_aantal_paginas = ceil($this->totaal_aantal_rijen/$max_aantal_per_pagina);
  }
  public function stelUrlIn($standaard) {
    $this->url = $standaard;
    if(ereg('[?]',$standaard)) {
      $this->scheidingsteken = '&amp;';
    } else {
      $this->scheidingsteken = '?';
    }
  }
  public function geefQuery() {
    if($this->totaal_aantal_rijen < ($this->huidige_pagina * $this->max_aantal_per_pagina)) {
      $query = mysql_query($this->standaard_sql.' LIMIT 0,'.$this->max_aantal_per_pagina);
      $this->huidige_pagina = 1;
    } else {
      $start = (($this->huidige_pagina * $this->max_aantal_per_pagina) - $this->max_aantal_per_pagina);
      $sql = $this->standaard_sql.' LIMIT '.$start.','.$this->max_aantal_per_pagina;
      $query = mysql_query($sql);
    }
    if($query) {
      return $query;
    } else {
      return FALSE;
    }
  }
  
  public function geefNummering() {
    $nummering = '';
    //de linkerkant
    $start_links = $this->huidige_pagina - $this->aantal_paginanummers;
    if($start_links <= 0) {
      for($l = 1; $l < $this->huidige_pagina; $l++) {
        if($l == 1) {
          $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina=1">Eerste</a> - ';
        } else {
          $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina='.$l.'">'.$l.'</a> - ';
        }
      }
    } else {
      $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina=1">Eerste</a> - ';
      for($l = $start_links; $l < $this->huidige_pagina; $l++) {
        if($l != 1) {
          $nummering .= '<a href="'.$this->url.$this->scheidingsteken.'pagina='.$l.'">'.$l.'</a> - ';
        }
      }
    }
    $nummering .= $this->huidige_pagina;
    //de rechterkant
    $start_rechts = $this->huidige_pagina + 1;
    $einde_rechts = $start_rechts + $this->aantal_paginanummers;
    for($r = $start_rechts; $r < $einde_rechts; $r++) {
      if($r < $this->totaal_aantal_paginas) {
        $nummering .= ' - <a href="'.$this->url.$this->scheidingsteken.'pagina='.$r.'">'.$r.'</a>';
      }
      if($r == $this->totaal_aantal_paginas) {
        $nummering .= ' - <a href="'.$this->url.$this->scheidingsteken.'pagina='.$r.'">Laatste</a>';
      }
    }
    if(($einde_rechts-1) < $this->totaal_aantal_paginas) {
      $nummering .= ' - <a href="'.$this->url.$this->scheidingsteken.'pagina='.$this->totaal_aantal_paginas.'">Laatste</a>';
    }
    return $nummering;
  }

}
?>


Voorbeeld.php

<?php
include('connect.php');
if(!isset($_GET['pagina']) || !is_numeric($_GET['pagina'])) {
  //als er geen pagina is opgegeven is deze 1
  $pagina = 1;
} else {
  $pagina = $_GET['pagina'];
}
//de query die je normaal gebruikt om de resultaten uit de tabel te halen
$sSql = 'SELECT veld1, veld2, veld3 FROM tabel';
//de query die je gebruikt om het aantal velden in de tabel te bepalen
$cSql = 'SELECT COUNT(1) FROM tabel';
//het maximum aantal records per pagina
$marpp = 10;
//het aantal paginanummers dat je onderaan wilt zien, links en rechts
//bijvoorbeeld Eerste - 2 - 3 - 4 - 5 - 6 - Deze pagina - 7 - 8 - 9 - 10 -11 - Laatste
$aantal_paginanummers = 5;

//de class aanroepen met de bovenstaande variabelen
$pagenav = new pageNavigation($sSql, $cSql, $marpp, $pagina, $aantal_paginanummers);
//geef de url van deze pagina op. NIET VERGETEN!
$pagenav->stelUrlIn('voorbeeld.php');
//de query met de LIMIT uitvoeren
$query = $pagenav->geefQuery();
//de records weergeven
while($r = mysql_fetch_assoc($query)) {
  echo $r['test'].'<br>';
}
//de nummering weergeven
echo $pagenav->geefNummering();
?>
