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.
Moderator
Comment