daniel2: Smarty: Im Template prüfen, ob Variable gesetzt ist

Hallo,

ich möchte mit Smarty in Template überprüfen, ob eine bestimmte Variable gesetzt ist oder nicht - eigentlich ganz einfach.

1. Zuweisen der Variable im Script:
$smarty->assign("test",1);

2. Abfragen derselbigen im Template:
{if isset($test)}TEST GESETZT{/if}

Nur leider will das ums Verrecken nicht funktionieren, ich habe keine Ahnung warum? Eigentlich kann da doch nicht viel schiefgehen, oder? "test" ist übrigens definitiv beim Template "angekommen", wenn ich im Template ein {$test} setze, steht das eine wunderbare "1".

Weiß jemand Rat?

Vielen Dank für eure Hilfe,
Grüße,
Daniel

  1. hallo,

    1. Zuweisen der Variable im Script:
      $smarty->assign("test",1);
    2. Abfragen derselbigen im Template:
      {if isset($test)}TEST GESETZT{/if}

    Zwar kannst du auch im Template "if" verwenden, aber das ist zu spät - wenn du sowas prüfen willst, was du vorhast. Verantwortlich ist nicht das Template, sondern dein Script. Also gib im Script an:

    if isset($test)}{  
    $smarty->assign("test",1);  
    } else {  
    ...  
    }  
    
    

    Was übrigens "$smarty->assign('test',1);" bewirken soll, ist mir nicht klar, das könntest du überprüfen. "$smarty->assign('test'=>$test);" wäre mir eher verständlich.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo Christoph,

      Zwar kannst du auch im Template "if" verwenden, aber das ist zu spät - wenn du sowas prüfen willst, was du vorhast.

      Nein, ist es nicht. Und wenn diese Überprüfung zur Präsentationslogik gehört, gehört sie auch genau dort hin. Lies http://smarty.php.net/manual/en/language.function.if.php.

      Was übrigens "$smarty->assign('test',1);" bewirken soll, ist mir nicht klar,

      Dann lies die Doku:
      http://smarty.php.net/crashcourse.php
      http://smarty.php.net/manual/en/api.assign.php

      Schöne Grüße,

      Johannes

  2. Hallo Daniel,

    Nur leider will das ums Verrecken nicht funktionieren, ich habe keine Ahnung warum? Eigentlich kann da doch nicht viel schiefgehen, oder? "test" ist übrigens definitiv beim Template "angekommen", wenn ich im Template ein {$test} setze, steht das eine wunderbare "1".

    Also bei mir funktioniert das. Kannst du vielleicht mal den kompletten Code eines Beispiels, bei dem es bei dir nicht funktioniert, hochladen?

    Schöne Grüße,

    Johannes

    1. Hallo Johannes,

      danke erstmal für Deine Antwort.

      Also bei mir funktioniert das. Kannst du vielleicht mal den kompletten Code eines Beispiels, bei dem es bei dir nicht funktioniert, hochladen?

      Eigentlich gibts da ja nicht so viel, was man falsch machen kann - daher ärgert es mich doppelt ;-)

      Im Script selbst weise $mark zu:
      $smarty->assign("mark","Bei der Verarbeitung Deiner Angaben ist ein Fehler aufgetreten.");
      $smarty->display("user/user_add.tpl");

      Im Template will ich das wieder abfragen:
      {if (isset($mark))} <p>Fehler:<br/>{$mark}</p> {/if}

      Korrekt zugewiesen ist $mark, d.h. es "kommt an" im Template - gebe ich direkt {$mark} ohne irgendwelche if-Abfragen aussenrum an, wird das brav ausgegeben...

      Ich benutze übrigens Smarty Version 2.6.16 unter PHP 4.3.4

      Vielen Dank für Deine Hilfe!

      Grüße,
      Daniel

      P.S.: Christoph, es handelt sich dabei ja um die Präsentationslogik - und die gehört imho schon in das Template. Schließlich will ich ja um meine Fehlermeldung herum Text ausgeben, sofern es eine gibt. Und auch Anweisungen dafür wie dieser Text zu formatieren ist (p,div,span,welche Klasse/ID) gehören in das Template, nicht in mein Script.

      1. Hallo

        {if (isset($mark))} <p>Fehler:<br/>{$mark}</p> {/if}

        Das if (isset($mark)) ist doch originär PHP. Muss die Abfrage dann nicht mit {php} und {/php} eingeschlossen werden? Eine Abfragemöglichkeit, wie sie die deine ist, wird in der schon von Johannes verlinkten Dokumentation zu if nämlich nicht aufgeführt. Da gibt's nur Vergleichsoperatoren.

        P.S.: Christoph, es handelt sich dabei ja um die Präsentationslogik - und die gehört imho schon in das Template.

        Schreib ihm das doch direkt. Wir befinden uns schließlich in einem threadbasierten System. :-)

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.1
        1. Hallo Auge,

          Das if (isset($mark)) ist doch originär PHP. Muss die Abfrage dann nicht mit {php} und {/php} eingeschlossen werden? Eine Abfragemöglichkeit, wie sie die deine ist, wird in der schon von Johannes verlinkten Dokumentation zu if nämlich nicht aufgeführt. Da gibt's nur Vergleichsoperatoren.

          Du musst die Seite schon richtig lesen ;-)

          Ich zitiere: {if} statements in Smarty have much the same flexibility as PHP if statements, with a few added features for the template engine. [..] All PHP conditionals and functions are recognized, such as ||, or, &&, and, is_array(), etc.«

          Und bei den Beispielen sind auch mehrere mit isset() dabei.

          Schöne Grüße,

          Johannes

          1. Hallo

            Du musst die Seite schon richtig lesen ;-)

            Ich zitiere: {if} statements in Smarty have much the same flexibility as PHP if statements, with a few added features for the template engine. [..] All PHP conditionals and functions are recognized, such as ||, or, &&, and, is_array(), etc.«

            Sapperlot, wer rechnet denn in der Einleitung mit derart wichtigen Informationen. *grummel*

            Und bei den Beispielen sind auch mehrere mit isset() dabei.

            Ja ja, wer lesen kann ... :-)

            Tschö, Auge

            --
            Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
            (Victor Hugo)
            Veranstaltungsdatenbank Vdb 0.1