PHP:URL-Klasse

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


Beschreibung

Klasse zum manipulieren der GET-Parameter aus der URL.

Die Klasse liest die Parameter des URL-Querys aus und kann:

  • neue Variablen einsetzen
  • Variablen manipulieren

Der Query-String kann anschließend neu zusammengesetzt werden

Anwendungsbereich

  • dynamische Organisation von HTML-Links auf Seiten
  • Zur Navigation


Quellcode

<?php
/**
 * 
 * Manipulieren der URL-Query
 *
 * @author Marcel Papp
 * 
 */
class URL {

    /**
     * Name der Variablen der URL welche modifiziert werden soll
     * @var string
     */
    private $var_name = '';
    
    /**
     * Liste von Variablen-Elementen der URL-Query
     * @var array
     */
    private $var_list = array();
    
    /**
     * URL Queryabschnitt
     * @var string
     */
    private $uri_query = '';


    /**
     * Konstruktor
     */
    public function __construct() {
               
    }
    
    /**
     * 
     * @param type $var_name
     */
    public function set_var( $var_name ){
        $this -> var_name = $var_name;
    }
    
    /**
     * Gibt den Wert einer Variable zurück, 
     * falls diese im Query-String vorhanden ist
     * 
     * @param string $key
     * @return mixed
     */
    public function get_var( $key ){
        
        # alle Variablen aus URL-Query extrahieren
        $this -> read_uri_query();
        
        # prüfen ob der Wert existiert
        if( array_key_exists( $key ,  $this -> var_list ) === false ){
            return false;
        }
        
        return $this -> var_list[ $key ];
        
    }
    
    /**
     * Gibt ein assiziatives Array aller GET-Variablen der URL zurück
     * @return array
     */
    public function get_vars(){
        
        # alle Variablen aus URL-Query extrahieren
        $this -> read_uri_query();
        
        return $ths -> var_list;
        
    }


    /**
     * 
     * Erzeugt einen aktuellen Query-String aus der URL,
     * mit Vorgabe einer neuen Variablen ( $key ) und Wert ( $value ),
     * einen neuen URL-String.
     * 
     * @param string $key
     * @param string $value
     * @return string
     * 
     */
    public function get_link( $key , $value ){
        
        $link = $_SERVER[ 'PHP_SELF' ];
        $link .= '?';
        
        # Variablen aus aktueller URL lesen
        $this -> read_uri_query();
        
        # Wert der Variablen namens $key mit $value überschreiben
        $this -> overwrite_var( $key , $value );
        
        # Querystring auf Basis aktueller Variablen erzeugen
        $this -> generate_uri_query();
        
        $link .= $this -> uri_query;
        
        return $link;
        
    }
    

    /**
     * Überschreibt eine Variable $key mit den Wert $value.
     * Wird keine Variable gefunden, wird sie neu angelegt.
     * 
     * @param string $key
     * @param mixed $value
     */
    public function overwrite_var( $key , $value ){
        $this -> var_list[ $key ] = $value;
    }


    /**
     * erzeugt aus einer Liste von Variablen eine URI-Query
     * 
     * @return boolean|string
     * 
     */
    private function generate_uri_query(){
        
        $this -> uri_query = '';
        
        if( count( $this -> var_list ) < 1 ){
            return false;
        }
        
        $pair = array();
        foreach( $this -> var_list as $key => $value ){
            $pair[] = implode( '=' , [ $key , $value ] );
        }
            
        $this -> uri_query = implode( '&' , $pair );
       
    }
  
    
    /**
     * speichert aus der URI die Variablen und ihre Werte in einer Liste
     * 
     * @return boolean|array
     * 
     */
    private function read_uri_query(){

        # URL-Query einlesen
        if ( !$query_string = $_SERVER[ 'QUERY_STRING' ] ){
            return false;
        }
        
        # Query-zerlegen
        if( !$querys = explode( '&' , $query_string ) ){
            return false;
        }

        $vars = array();
      
        # alle Query-Variablen aufnehmen
        foreach ( $querys as $value ){
            
            $pair = array();
            
            # prüfen ob Zuweisungsoperator existiert
            if( !$pair = explode( '=', $value ) ){
                continue;
            }
            
            # prüfen ob beide Seiten der Zuweisung vorhanden sind
            if( isset( $pair[ 0 ] ) && isset( $pair[ 1 ] ) && strlen( $pair[ 0 ] ) > 0  ){
                $vars[ $pair[ 0 ] ] = $pair[ 1 ];
            } 
            
        }
    
        $this -> var_list = $vars;
        
    }
    
}