Für eine mehrsprachige Website möchte ich eine Block-Funktion schreiben, die folgende Syntax hat:
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:
$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.
Code:
{lang}welcome_text{/lang}
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'];
}
?>
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.
Kommentar