tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
743
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Lukasz Tutorials.de Gastzugang
    Hallo

    Ich habe ein kleines TPL Systemchen geschrieben, was von anderen abweicht. Deshalb frage ich mich, ob es eins ist oder nicht. Dahinter erfüllt es den Zweck oder auch nicht. Ich sehe mir oft andere Templatesysteme an, und merke, andere abrbeiten mit Klassen oder implode() etc... Das alles ist bei mir nicht der Fall.

    Ich bin zwar kein Parser Spezialsit, habe aber das ganze so realisiert, dass der Name einer Variable eines Arrays oder einer Klasse in ihren Wert ersetzt wird. Das wars auch schon.

    Als kleine Firewall ersetze ich $ in HTML Code falls es der Inhalt einer Variable sein sollte, damit keine unerwünschte Markierung auftaucht.

    Also hier folgt der Code. Einige meinen, es hat nicht mit einem Templatesystem zu tun, aber es funktioniert doch so und erfüllt auch selbigen zweck. Eure Meinung bitte:


    PHP-Code:
    //-----> Definition <------||
    $_reg_comp[] = 'TPLLIB2.1';

    //-----> Einstellungen <-----||
    $_TPLLIB_TPLDIR 'templates'//Ordnername zum Templateordner ohne (/) am Ende! Auch absoluter Pfad möglich und http:// Pfad falls Templates auf einem anderen Server liegen.
    $_TPLLIB_CACHE 1//1 -> Template Cache an. Hat den Vorteil dass der Server die Templates jeweils nur einmal von der HDD ausliest, und dann für ernuete Verwendungen im Speicher bereit hält bis das Script verarbeitet wurde. | 0 -> Template Cahce ist aus. Es wird jedes mal das Template von der HDD ausgelsen, verbleibt aber dafür nicht bis zum Scriptende im Speicher.



    function call_return_value($notlocal_int) {
        if((
    eregi('->',$notlocal_int) && eregi('\[',$notlocal_int)) || eregi('->',$notlocal_int)) {
            
    $notlocal_int explode('->'$notlocal_int);
            @eval(
    'global $'.$notlocal_int[0].'; $notlocal_var = $'.$notlocal_int[0].'->'.$notlocal_int[1].';');
            return 
    $notlocal_var;
        } elseif(
    eregi('\[',$notlocal_int)) {
            
    $notlocal_int_0 =  preg_replace("/([^\[]*)\[(.*)\]/",'\\1',$notlocal_int);
            
    $notlocal_int_1 =  preg_replace("/([^\[]*)\[(.*)\]/",'\\2',$notlocal_int);
            @eval(
    'global $'.$notlocal_int_0.'; $notlocal_var = $'.$notlocal_int_0.'['.$notlocal_int_1.'];');
            return  
    $notlocal_var;
        } else {
            @eval(
    'global $'.$notlocal_int.'; $notlocal_var = $'.$notlocal_int.';');
            return  
    $notlocal_var;
        }
        return 
    ''//empty
    }



    function 
    call_template($tplname) {
        global 
    $_TPLLIB_TPLDIR$_TPLLIB_CACHE$_TPLLIB_PROTOKOLL;
        if (
    $_TPLLIB_CACHE == 1) {
            global 
    $TPLLIB_TEMPLATES;
            if (!isset(
    $TPLLIB_TEMPLATES["$tplname"])) {    
                
    $TPLLIB_TEMPLATES["$tplname"] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) ? file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) : die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
            }
        } else {
            
    $TPLLIB_TEMPLATES["$tplname"] = @file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) ? file_get_contents($_TPLLIB_TPLDIR.'/'.$tplname) : die('TPLLIB ERROR 01: Ein Template ist nicht vorhanden! Das Template ('.$tplname.') konnte nicht gefunden werden.');
        }
        
    $muster = array(
            
    '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\])([^\]])/miUe',
            
    '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\])([^\]])/miUe',
            
    '/(\$)([a-z0-9_]*|[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*)([^a-z0-9->_\'"\[\]])/miUe',
            
    '/(\$)([a-z0-9_]*|[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*)([^a-z0-9->_\'"\[\]])/miUe',
            
    '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*|[a-z0-9_]*)([^a-z0-9_>\[\]])/miUe',
            
    '/(\$)([a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*\[[a-z0-9_\[\]\'"]*\]|[a-z0-9_]*->[a-z0-9_]*|[a-z0-9_]*)([^a-z0-9_>\[\]])/miUe',
        );
        return 
    preg_replace($muster,"''.call_return_value('\\2').return_escape_template('\\3').''",$TPLLIB_TEMPLATES["$tplname"]);
    }

    function 
    return_escape_template($int) {
        if (
    $int == '\"') {
            return 
    '"';
        } else {
            return 
    $int;
        }
    }


    function 
    call_outlook_eml($tplname) {
        
    $tpl call_template($tplname);
        
    $emlmuster = array(
        
    '/(.*)(Version[^0-9\.0-9])(.*)/si'
        
    );
        return 
    preg_replace($emlmuster,'\\2\\3',$tpl);

    Nun ist es eins oder ist es keins? Die Variablen schreibe ich einfach in die Templates rein, so wie wenn man es in PHP auch einschreiben würde.
     

  2. #2
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Was ich daraus erkenne, ist, dass es PHP-Variablendeklarationen durch ihren Wert ersetzt. Liege ich da richtig? In dem Fall sind die PHP-Variablendeklarationen eben die Platzhalter. Und eine Template Engine ist meines Wissens nichts anderes als eine Software, die eine Vorlage nach Platzhaltern durchsucht und diese durch endgültige Werte ersetzt. Also kannst du das ruhig als Template Engine bezeichnen.

    Aber irgendwie finde ich das auch etwas kompliziert. Denn eine Template Engine wird oft dafür eingesetzt, um die Datenverarbeitung (PHP-Skript) von der Ausgabe/Auszeichnung (HTML-Dokument) zu trennen. Wenn nun aber als Platzhalter reelle Veriablen eingesetzt werden, sind sie doch wieder stark miteinander verbunden, da die Platzhalter nicht in dem Maße frei wählbar sind wie sie es eigentlich sein sollte.
     
    Markus Wulftange

  3. #3
    Lukasz Tutorials.de Gastzugang
    Ja das ist doch mal gut zu wissen. Ich habe früher schon öfter mit Platzhaltern gearbeitet. Doch da hatte ich das Problem für jeden dieser Platzhalter Variablen zu deklarieren und zweitens eben später die richtigen Variablen für die Platzhalter zu finden. So habe ich das eher aus Bequemlichkeit gemacht, dass ich eben einfach meine Arrays meine Variablen bis zu Klassen Variablen einfach so inst Template schreibe, wie in den PHP Code auch. Mit ein wenige Aussagekräftigen Variablennamen kann sich das auch gut warten lassen.

    Doch eher habe ich gedacht, dass man Template mit implode() etc, bearbeiten sollte, konnte so aber auch keien besonderen Vor oder Nachteile finden.

    Danke fürs Statemant, mir ging es eher darum, ob man sowas auch mal als TPL Systemchen der Freeware zuscheiben kann, oder ob eher das Thema verfehlt wurde. Und dein Beitrag hat mich ermutigt, doch nicht alles zu glauben, was alle so vor sich schlecht reden.
     

Ähnliche Themen

  1. Template System...
    Von Vectormaster im Forum PHP
    Antworten: 12
    Letzter Beitrag: 05.03.09, 12:41
  2. Antworten: 1
    Letzter Beitrag: 03.05.08, 13:16
  3. Template System
    Von Avedo im Forum PHP
    Antworten: 21
    Letzter Beitrag: 02.06.07, 16:26
  4. Template System - if, while usw
    Von js-mueller im Forum PHP
    Antworten: 13
    Letzter Beitrag: 22.10.03, 17:44
  5. Template System ?
    Von rookie im Forum PHP
    Antworten: 1
    Letzter Beitrag: 16.01.03, 21:03