Meine PHP Templateklasse.

Rainer Schulz » 18. Oktober 2010 um 13:21 Uhr

1 Kommentar

Screenshot 

Ich habe seit einiger Zeit immer mal wieder an meiner PHP-Templateklasse gearbeitet und diese meinen Bedürfnissen angepasst. Gestern habe ich die Klasse etwas Dokumentiert und zusammen mit einer PHP-Testdatei und einem kleinen Testtemplate in ein Ziparchiv gepackt um es euch zur Verfügung zu stellen.

Da ich mich nicht für Unfehlbar halte, kann es sicherlich sein, dass kleinere Fehler oder Bugs im Script existieren. Wenn Ihr einen Fehler findet, bitte ich euch diesen hier als Kommentar zu melden.

Die PHP-Templateklasse kann:

  • Platzhalter ersetzen

  • Schleifen verarbeiten

  • IF-Bereiche je nach Übergabeparameter anzeigen oder ausblenden

Hier nun die Details der Datei und der Downloadlink:

Hier die Klasse ohne Dokumentation:

class rsTPL
{
    public $file = null;
    public $tpl = null;
    public $preg = null;
    public $each = null;
    private $dat = null;

    public function outputPrint()
    {
        $this‑>dat = file_get_contents( $this‑>file );
        $this‑>dat = $this‑>parsePreg( $this‑>dat );
        $this‑>dat = $this‑>parseForeach( $this‑>dat );
        $this‑>dat = $this‑>parseTpl( $this‑>dat );

        return print( $this‑>dat );
    }

    public function outputString()
    {
        $this‑>dat = file_get_contents( $this‑>file );
        $this‑>dat = $this‑>parsePreg( $this‑>dat );
        $this‑>dat = $this‑>parseForeach( $this‑>dat );
        $this‑>dat = $this‑>parseTpl( $this‑>dat );

        return $this‑>dat;
    }

    private function parseForeach( $result )
    {
        if(isset( $this‑>each ) )
        {
            foreach( $this‑>each as $key => $value )
            {
                preg_match( "#\{FOREACH\|".$key."\}(.*?)\{ENDFOREACH\|".$key."\}#si", $result, $matches );
                $res = "";

                foreach( $this‑>each[$key] as $layerkey => $layervalue )
                {
                    $push = $matches[1];

                    foreach( $this‑>each[$key][$layerkey] as $detailkey => $detailvalue )
                    {
                        $push = $this‑>replaceKeys( $detailkey, $detailvalue, $push );
                    }

                    $res.= $push."\n";
                }

                $result = preg_replace( "#\{FOREACH\|".$key."\}(.*?)\{ENDFOREACH\|".$key."\}#si", $res, $result );
            }
        }

        return $result;
    }

    private function parsePreg( $result )
    {
        if(isset( $this‑>preg ) )
        {
            foreach( $this‑>preg as $key => $value )
            {
                if( $value ){ $value = "$1"; }else{ $value = ""; }
                $result = preg_replace( "#\{IF\|". $key."\}(.*?)\{ENDIF\|".$key."\}#si", $value, $result );
                if( !$value ){ $value = "$1"; }else{ $value = ""; }
                $result = preg_replace( "#\{IF\|!". $key."\}(.*?)\{ENDIF\|!".$key."\}#si", $value, $result );
            }
        }

        return $result;
    }

    private function parseTpl( $result )
    {
        if(isset( $this‑>tpl ) )
        {
            foreach( $this‑>tpl as $key => $value )
            {
                $result = $this‑>replaceKeys( $key, $value, $result );
            }
        }

        return $result;
    }

    private function replaceKeys( $key, $value, $result )
    {
        $result = str_replace( "{".$key."}", $value, $result );

        return $result;
    }
}

 

Diese Artikel könnten dich auch interessieren

1. PHP Design Patterns: Das Registry Pattern » 02. Januar 2012
2. Ausnahmebehandlung mit PHP » 01. Januar 2012
3. Optimierung des Blogs mit PHP » 18. April 2011
4. Objektorientierte Programmierung » 29. Oktober 2010
5. Grundlagen der Programmierung » 26. Oktober 2010

Diesen Beitrag teilen

Twitter Facebook Delicious Digg Bei allen Services (Mister Wong, Yigg, Infopirat etc.)

  1. 1 Kommentar zum Beitrag.

  2. 1. von Thosh am 04. Januar 2013 um 15:48:00 Uhr.

    Sieht gut aus, ich probiere mal, ob sie für mich taugt

  3. Schreib einen Kommentar.
  4. Kommentare sind deaktiviert.