[PHP] smarty function in template variable ausführen

Dieses Thema im Forum "Webentwicklung" wurde erstellt von onip, 10. Juni 2013 .

  1. 10. Juni 2013
    Zuletzt bearbeitet: 10. Juni 2013
    smarty function in template variable ausführen

    hallo zusammen,

    ist es möglich in smarty ein funktionsaufruf in einer template variable auszuführen?
    was ich möchte:
    ich hab in einer DB einen kontenttext der z.b. so aussieht.
    Code:
    <h1>Home</h1>
    <p>{snippet name="back"}</p>
    
    die template variable sieht in etwas so aus:
    PHP:
    $smarty -> assign ( 'content' $dbContentText );
    {snippet name="back"} ist ein eigenes smarty plugin, dass mir aus der DB die übersetzung von "back" zurückgibt.

    index.tpl
    PHP:
    { $content }
    <
    p >{ snippet name = "back" }</ p >
    gefetched
    HTML:
    <!-- dbContentText -->
    Home
    {snippet name="back"}
    
    <!-- snippet in tpl eingebunden -->
    zurück
    
    ich will das der string aus der DB diese funktion auch ausführt wenn smarty->fetch durchgeführt wird.

    // edit
    hab durch eine weiter function das problem behoben.
    function compile:
    PHP:

    function  smarty_function_compile ( $params $smarty ) {

        if (!isset(
    $params [ 'var' ]) ||  $params [ 'var' ] ==  '' ) {
            return;
        }
        return 
    $smarty -> fetch ( 'string:' . $params [ 'var' ]);    
    }
    aufruf
    PHP:
    { compile  var= $content }
    rückgabe
    HTML:
    Home
    zurück
    
    läuft wie gewollt.
    jetzt zum eigentlich spass.
    damit wäre ich nun in der lage x beliebige functionen zu erstellen,
    wie z.B. ein youtube film einbinden.
    grob:
    PHP:
    // *.php
    $var  '{youtube src="5xLfvY8upsQ" width="420" height="315"}' ;
    $smarty -> assign ( 'content' $var );
    ...
    // *.tpl
    { compile  var= $content }
    damit spar ich mir nun in der kontent-pflege das eigentliche einbinden des youtube codes.
     
  2. 10. Juni 2013
    AW: smarty function in template variable ausführen

    Und das Problem dabei ist das selbe wie bei der Verwendung von eval.

    - Kein Cache (lahm)
    - Je nach dem wie unvorsichtig du bist kann auch anderer Code eingeschleust werden
     
  3. 10. Juni 2013
    AW: smarty function in template variable ausführen

    ne, das cachen funktioniert weiterhin bei mir.

    die eigentliche plugin-function verarbeitet die übergabe.
    ist die plugin-funktion nicht vorhanden schmeißt smarty einen fehler,
    oder die plugin-funktion selbst kann z.b. einen leeren string zurück geben,
    wenn irgendetwas nicht stimmt.
    hängt halt davon ab wie gewissenhaft man die erstellt.

    ein eval wird dabei nicht verwendet.
     
  4. 12. Juni 2013
    AW: smarty function in template variable ausführen

    Du übersetzt zur Laufzeit innerhalb eines Templates ein weiteres Template.

    D.h.: Die *.tpl Datei wird einmalig übersetzt und dann im Cache abgelegt, doch die Funktion darin (bzw. $smarty->fetch(...)) wird immer wieder neu übersetzt und anschließend verworfen.

    Das entspricht dem Verhalten von eval()
     
  5. 13. Juni 2013
    Zuletzt bearbeitet: 13. Juni 2013
    AW: smarty function in template variable ausführen

    ich lass doch nur eine template variable neu kompilieren, nicht das ganze konstrukt.
    eine art eval ist es schon, jedoch nicht so gefährlich.
    wenn in meinen string eine plugin-function nicht vorhanden ist, wir auch nix gemacht.

    hast du ggf. einen anderen vorschlag, wie man das umsetzen könnte?
    wie gesagt ich möchte in meinem content die möglichkeit haben, weiter smarty-platzhalter
    zu verwenden die kompiliert werden sollen.

    ps:
    colle darth vader animation.
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.