Template replacement - Tipps?

  • Moin,


    steh gerade aufm Schlauch. Ich bin dabei die Templategeschichte bei mir einzurichten.
    Dabei suche ich den einfachsten/übersichtlichsten und dabei effizientesten Weg das per PHP zu realisieren.
    Geplant ist zB sowas:


    Dabei soll im Bsp die Form für die Sprachauswahl zurückgegeben werden.
    Angenommen wir supporten DE und EN, dann würde {REPEAT} als Grundstein für weitere Sprachen genutzt.


    Die Frage ist nun: Wie Schneide ich mir die {REPEAT}s aus und ersetze sie am besten?
    Explode: einfach, schnell
    RegExp: sinnvoler aber zu langsam?


    Oder hat jemand nen ganz anderen Ansatz?

  • Tendenziell ist der Ansatz über str_replace schon richtig (hier kannst du Arrays verwenden, da sparst du dir Funktionsaufrufe.
    Wird das zu langsam, musst du optimieren, du kannst dir da z.B. mal die Output-Control-Funktionen von PHP ansehen, da lässt sich bestimmt was mit machen (ungetestet - wäre jetzt nur mal meine Idee): http://www.php.net/manual/de/ref.outcontrol.php
    Ansonsten schau dir einfach an, wie das Templating bei CMS oder Template-Engines funktioniert :)

  • Bei den "Großen" durchzusehen ist gar nicht so einfach. Ich guck da ab und zu rein, aber manchmal sag ich mir dann "da kannste die Zeit auch nutzen. um dir selbst was einfallen zu lassen" :D


    Ich steh gerade vor der Frage:
    1. per PHP das/die input field erstellen und str_replace({REPEAT},...)
    oder
    2. per template alle placeholder (also auch {TITLE} ect) replacen.


    Ich denk aber 2. macht keinen Sinn oder?


    1. würde dann einfach so aussehen:

    HTML
    <form name="language" action="" method="POST" enctype="{ENCTYPE}">
        {REPEAT}
    </form>


    wobei {REPEAT} für jedes input field steht, das per PHP dyn erstellt wird.



    EDIT:
    Quark ... had vergessen was Du mit array meintest. lauras :D
    is ja ganz simpel:


    danke =)

  • Habe hier ein Problem( str_replace ersetzt nicht ). :(



    Die test.html:

    HTML
    Ein {TEST}Test Text{ERNEUT}.


    Die Ausgabe:


    Ich komm nicht drauf was falsch ist.

  • Ich glaube das wird nicht funktionieren. Obwohl ich auch grad nicht ganz dahinter steige.



    ich nutze explode. Für mich einfacher:

    PHP
    function getBetween($content,$start,$end)
    {
        $r = explode($start,$content);
        if(isset($r[1])){
            $r = explode($end,$r[1]);
            return $r[0];
        }
        return false;
    }


    hier ein simples (ausbaufähiges) Bsp


    Code
    Ein ersetzter Text.
    Ein ersetzter Text.
    Ein {TEST2}Test Text{ERNEUT2}.
    Ein ersetzter Text.
    Ein ersetzter Text.
    Ein ersetzter Text2.
  • Wäre ja auch viel zu einfach gewesen, um zu funktionieren :D


    hmmn joa danke, ich werde mich mal dran setzen..


    Aber im php manual machen die doch auch sowhat :? :

    PHP
    // Liefert: Sie sollten taeglich Pizza, Bier und Eiscreme essen.
    $phrase = "Sie sollten taeglich Fruechte, Gemuese und Ballaststoffe essen.";
    $gesund = array("Fruechte", "Gemuese", "Ballaststoffe");
    $lecker = array("Pizza", "Bier", "Eiscreme");
    
    
    
    
    //Manual str_replace
  • Ja, wenn du
    $gesund durch $lecker replacen willst, dann

    PHP
    $phrase = "Sie sollten taeglich Fruechte, Gemuese und Ballaststoffe essen.";
    $gesund = array("Fruechte", "Gemuese", "Ballaststoffe");
    $lecker = array("Pizza", "Bier", "Eiscreme");
    
    
    
    
    echo str_replace($gesund,$lecker,$phrase);


    heißt also:

    PHP
    str_replace(zu suchender str oder array, zu ersetzender string oder array, ersetzen in string soundso);


    Du kannst also arrays verwenden. Beachte aber die Reihenfolge.
    Der Zeiger wird in beiden Arrays immer eins weiter gesetzt. Keys spielen dabei keine Rolle, soweit ich weiß.
    (was da Ganze manchmal nicht mit Arrays anwendbar macht, da man oft Key und Wert in einem Array hat und dieses erst in 2 Arrays wandeln müsste)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!