Smarty template prüfen ob Variable vorhanden ist

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Smarty template prüfen ob Variable vorhanden ist

    Hallo Community,

    habe da ein kleines Problem/Frage. Habe dazu leider in der docu von Smarty nichts gefunden.
    Gibt es eine Möglichkeit ein smarty template zu überprüfen ob eine bestimmte variable z.b im template footer vorahnden ist. z.b {$copyright}

    das ganze natürlich im phpscript und nicht im Template selber.

    Vielleicht hat ja jemand eine Idee wie man dies am besten umsetzen könnte.

    Vielen Dank!

    lg
    Dragon
  • besten dank für deine Antwort. Leider steht dort nicht viel beschrieben so das ich doch noch etwas ahnungslos bin :)

    wäre mein gedanke so richtig oder habe ich es falsch verstanden.

    Source Code

    1. // get assigned template var 'foo'
    2. $myVar = $smarty->get_template_vars('copyright');
    3. if (isset($myVar)){
    4. echo "Copyright ist vorhanden";
    5. }else{
    6. echo "Copyright ist nicht vorhanden";
    7. }


    Mein vorhaben ist quasi das geprüft wird ob die Variable {$copyright} im templatres/footer.html vorhanden ist. Wenn nicht soll er einen error erzeugen... sozusagen um zu verhindern das die variable entfernt wird.
  • Aaah. Mit der Funktion kannst du prüfen, ob die Variable an das Template übergeben wurde. Du möchtest aber wissen, ob die Variable verwendet wird.

    hmm, eine Funktion wüsste ich dazu nicht. Du könntest das Template halt auslesen (file_get_contents) und dann per Regex /\{variablenname\}/ schauen, ob diese vorhanden ist.

    Source Code

    1. $template = file_get_contents("template");
    2. if( preg_match("/\{variablenname\}/", $template) ){
    3. die("Variable 'variablenname' vorhanden");
    4. }
    5. else{
    6. die("'vartiablenname' nicht vorhandeN");
    7. }
    Jan Thurau
    Software and Systems Engineer
    janthurau.de

    [Blocked Image: http://www.pageheroes.com/media/image/pageheroes_logo.png] - We get your page working!

    The post was edited 2 times, last by Jan Thurau ().

  • Es ist vermutlich etwas umständlich und gleichzeitig ungetestet. Denoch könnte man es so versuchen, falls du Smarty 3.x.x benutzt. Ich habe das ganze unter 3.1.8 gefunden.

    Smarty-Templates werden normalerweise kompiliert um das Parsen der Templates einzusparen. Der Parser sitzt in der Datei "$smartypath/sysplugins/smarty_internal_templateparser.php". Wenn man sich mal in "Smarty_Internal_Templateparser" die Methode "compileVariable" anguckt, dürfte schnell klar sein, dass hier die Variablen rausgefischt werden um sie in PHP Sourcecode zu verwandeln.

    Hier die Zeilen, die wir suchen.

    Source Code

    1. public function compileVariable($variable) {
    2. if (strpos($variable,'(') == 0) {
    3. // not a variable variable
    4. $var = trim($variable,'\'');
    5. $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
    6. $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
    7. }
    8. // return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
    9. return '$_smarty_tpl->tpl_vars['. $variable .']->value';
    10. }


    Wenn du jetzt noch deine Smarty Template-Klasse (bei dir mit Sicherheit "Smarty_Internal_Template" in "$smartypath/sysplugins/smarty_internal_template.php") so tweakst, dass sie eine Methode (sagen wir "acceptVariable($variable)") hat. Dann kannst du diese mit

    Source Code

    1. $this->template->acceptVariable($variable)
    in der Parserklasse aufrufen um sie der Templateklasse zu übergeben.

    Der geänderte Code in Smarty_Internal_Templateparser sieht dann so aus:

    Source Code

    1. public function compileVariable($variable) {
    2. if (strpos($variable,'(') == 0) {
    3. // not a variable variable
    4. $var = trim($variable,'\'');
    5. $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable($var, null, true, false)->nocache;
    6. $this->template->properties['variables'][$var] = $this->compiler->tag_nocache|$this->compiler->nocache;
    7. }
    8. // return '(isset($_smarty_tpl->tpl_vars['. $variable .'])?$_smarty_tpl->tpl_vars['. $variable .']->value:$_smarty_tpl->getVariable('. $variable .')->value)';
    9. $this->template->acceptVariable($variable);
    10. return '$_smarty_tpl->tpl_vars['. $variable .']->value';
    11. }
    Display All


    Ich hoffe du kannst mit diesem Konzept etwas anfangen.

    Edit: Nachteil daran ist natürlich, dass die Variablen nur beim Kompilieren rausgefischt werden. Man müsste diese also so speichern, dass sie später mit dem Template assoziiert werden.
    IMP, out.

    The post was edited 1 time, last by TheIMP ().