Moin!
Ein paar Nach- und Verbesserungen:
<?php
# Konfiguration mit Konstanten
define ('FTX_SHOW_PAGES', 5);
define ('FTX_PAGER_LINK_ITEM', '<a href="?seite={{NUMMER}}"><button class="FTX_Pager">{{NUMMER}}</button></a>');
define ('FTX_PAGER_NOLINK_ITEM', '<button class="FTX_Pager">{{NUMMER}}</button>');
define ('FTX_PAGER_BETWEEN_ITEMS', "<br>\n");
### HIER Dein Skript
### Test: mkPager ($anzahlPages, $aktuellePage)
echo mkPager(10 , 2), "\n";
function mkButtons ($min, $max, $aktuellePage) {
## Erzeugt die eigentlichen Button, wird von
## Funktion Pager aufgerufen.
$ar=array();
for ($i=$min; $i<=$max; $i++) {
# Link oder nicht?
if ( $i != $aktuellePage ) {
$ar[] = str_replace('{{NUMMER}}' , $i, FTX_PAGER_LINK_ITEM );
} else {
$ar[] = str_replace('{{NUMMER}}' , $i, FTX_PAGER_NOLINK_ITEM );
}
}
return implode( FTX_PAGER_BETWEEN_ITEMS, $ar);
}
function mkPager ($anzahlPages, $aktuellePage) {
## Erzeugt den Pager
$firstPage=0;
$lastPage=$anzahlPages;
## erster Fall: SHOW_PAGES <= $anzahlPages
if ( FTX_SHOW_PAGES >= $anzahlPages ) {
return mkButtons( 1, $anzahlPages, $aktuellePage );
}
## Zweiter Fall, genug Seiten:
# Ermittellen der Mitte
# Wenn gerade Zahl, dann links der Mitte:
$min = $aktuellePage - floor(FTX_SHOW_PAGES / 2 ) + 1 - FTX_SHOW_PAGES % 2;
$max = $aktuellePage + floor(FTX_SHOW_PAGES / 2 );
# Es kann sein, der Ausschnitt muss gerückt werden, wenn die
# aktuelle Seite nahe am Anfang oder Ende ist:
while ( $min < 1 ) {
$min ++;
$max ++;
}
while ( $max > $anzahlPages ) {
$min --;
$max --;
}
return mkButtons( $min, $max, $aktuellePage );
}
Jörg Reinholz