Jörg Reinholz: Linkleiste für Pager (Nach- und Verbesserungen)

Beitrag lesen

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