[Smarty] Block-Funktion wird zweimal ausgeführt

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Smarty] Block-Funktion wird zweimal ausgeführt

    Für eine mehrsprachige Website möchte ich eine Block-Funktion schreiben, die folgende Syntax hat:

    Code:
    {lang}welcome_text{/lang}
    In der Datenbank sind die Texte in den verschiedenen Sprachen gespeichert. Die Block-Funktion "lang" sollte dann den Text mit dem Titel "welcome_text" in der gewünschten Sprache liefern.

    Mein Code für die Block-Funktion "lang" befindet sich im "plugin"-Ordner von Smarty und sieht wie folgt aus:

    PHP-Code:
    <?php
     
    function smarty_block_lang($params$content, &$smarty, &$repeat)
    {
        global 
    $db;
        global 
    $language;
        
    $result $db->select('languages_items''value''title="'.$content.'" AND language="'.$language.'"');
        return 
    $result[0]['value'];
    }
    ?>
    $db ist ein mein MySQL-Objekt. Die Methode "select" liefert Datenbankergebnisse als Array zurück. $language enthält die gewünschte Sprache.

    Leider funktioniert das Ganze nicht so wie gewünscht. Nach ein paar Tests konnte ich feststellen, dass die Funktion zweimal ausgeführt wird. Beim ersten Mal ist $content ein leerer String ist, beim zweiten Mal enthält er den gewünschten Wert (in meinem Beispiel "welcome_text").

    Für mich ist dieses Verhalten total unlogisch. Weiß jemand von euch vielleicht, warum das so ist, und wie man das Problem lösen kann?

    Über Antworten wäre ich sehr dankbar.

  • #2
    Um das bewerten zu können, fehlt IMHO Quellcode. Durch die wenigen Zeilen sieht man nichts.

    Kannst Du den relevanten Quellcode in eine eigenständige Datei extrahieren und posten?

    cya

    Kommentar


    • #3
      Ist schon lange her für mich, aber ist $repeat nicht ein Boolean, das angibt ob gerade das öffnende oder das schließende Tag geparst wird? Beim öffnenden gibt es kein $content und für dich gar nichts zu tun.

      Kommentar


      • #4
        global ist böse und sollte vermieden werden.

        Kommentar

        Lädt...
        X