PHP:PageNav-Klasse

In proc.gif
In Arbeit!
... weitere TODO-Listen

Beschreibung

Klasse für die Organisation von Seiten-Blätter-Funktionen. Ermöglicht das Navigieren innerhalb einer Seite. Dazu werden zu navigierende Elemente erfasst und die gewünschte Zahl an Elemente pro Seite festgelegt. Die Klasse gibt entsprechend der Methoden Vorgänger, Nachfolger zurück und prüft ob diese Aktionen möglich sind.

Die Klasse kann zusammen mit PHP:URL-Klasse verwendet werden. Der Vorteil beider Klassen ist die unabhängige Navigation innerhalb einer Seite durch mehrere Listen.


Verwendung

Quellcode

<?php

/**
 * Seitennavigation
 * 
 * 
 * 
 */

class PageNav{
   
    /**
     * Errechnete Seitenzahl ( maximum )
     * @var int
     */
    private $pages = 0;
    
    /**
     *Aktuelle Seite
     * @var int
     */
    private $page = 0;

    /**
     * Nummer der Zurück-Seite
     * @var int
     */
    private $page_back = 0;
    
    /**
     * Nummer der Vor-Seite
     * @var int 
     */
    private $page_next = 0;    
    
    /**
     * Schrittweite
     * @var int
     */
    private $page_step = 1;

    /**
     * Gesamtzahl der Einträge
     * @var int
     */
    private $items = 0;
    
    /**
     * Anzahl der Einträge pro Seite
     * @var int 
     */
    private $items_of_page = 0;
    
    /**
     * Name der GET-Variablen
     * @var string 
     */
    private $page_name = '';


  


    public function __construct() {
        
    }
    
    
    /**
     * Benennung der Variablen für Seitennavigation
     * @param string $page_name
     */
    public function set_page_name( $page_name ){
        $this -> page_name = $page_name;
    }

    
    /**
     * Anzahl der Seiten festlegen
     * @param type $pages
     */
    public function set_pages( $pages ){
        $this -> pages = $pages;
    }
    

    /**
     * Anzahl der Datensätze
     * @param type $items
     */
    public function set_items( $items ){
        $this -> items = $items;
    }
    
    
    /**
     * Anzahl der Einträge pro Seite
     * @param type $items
     * 
     */
    public function set_item_of_page( $items ){
        $this -> items_of_page = $items;        
    }
    
    
    /**
     * Gibt den aktuellen Namen der Seitennavigationsvariablen zurück
     * @return string
     */
    public function get_page_name(){
        return $this -> page_name;
    }

    
    /**
     * Gibt die aktuelle Seite als Zahl zurück
     * @return int
     */
    public function get_page(){
        $this -> read_page();
        return $this -> page;
    }

    
    /**
     * gibt die ermittelte Anzahl der Seiten zurück
     * @return type
     */
    public function get_pages(){
        
        # errechne Seitenzahl über Zahl der Gesamteinträge
        $this -> pages = (int)ceil( $this -> items / $this -> items_of_page );

        return $this -> pages;
        
    }
    
    
    /**
     * ermittelt die Nummer der nächsten Seite
     * ( Rotation möglich -> Sprung auf Anfangsnummer )
     * @return int
     */
    public function get_page_next( $rotation = true ){
        
        $this -> get_pages();
        $this -> read_page();
        
        if( $this -> pages > $this -> page ){
            return $this -> page + 1;
        } else {
            if( $rotation === true ){
                return 1;            
            } else {
                false;
            }
        }
        
    }
    
    /**
     * ermittel nie Nummer der Vorgängerseite
     * ( Rotation möglich -> Sprung auf Endnummer )
     * @return type
     */
    public function get_page_back( $rotation = true ){

        $this -> get_pages();
        $this -> read_page();

        if( 1 < $this -> page ){
            return $this -> page - 1;
        } else {
            if( $rotation === true ){
                return $this -> pages;
            } else {
                false;
            }
        }
        
    }
    

    /**
     * aktuelle Seitennummer auslesen
     * 
     */
    private function read_page(){
        
        # aktuelle Seite aus URL ermitteln
        
        
        if( !$page = @$_GET[ $this -> page_name ] ){
            $page = 1;
        }
        
        # Validierung
        # prüfen ob Zahl
        if( is_numeric( $page ) === false ){
            $page = 1;
        }
        
        # Integer Typ erzwingen
        $page = (int)floor( $page * 1 );
        
        # prüfen ob die übergebene Seite kl. 1 ist        
        if( $page < 1 ){
            $page = 1;
        }
        
        # prüfen ob Zahl größer als Maximum ist
        if( $page > $this -> pages ){
            $page = $this -> pages;
        }
            
        $this -> page = $page;
            
    }
    
    
    
}