Smarty Template-Engine problem mit PHP Code

digifoho

Grünschnabel
Morgen

Wie schon in einen anderen Thread ( http://www.tutorials.de/forum/php/249269-gallery-modul-problem.html ) hab ich ein kleines Problem mit der Template-Engine Smarty.

Ich komm zwar langsam damit zurecht nur ein Problem hab ich noch.

Und zwar das Problem ist mit PHP-Code in der Template-Datei.

Also ich hab ein Formular in der tpl-Datei dies sendet die Variablen per POST an die gleiche tpl-Datei. Nun kann ich aber nicht alle Variablen wieder auslesen lassen (oder wie man das nennt) bzw. ich kann schon alle auslesen (und zwar mit $GLOBALS["name"]) nur wenn ich folgendes mach:

PHP:
$nachricht = "Name: $GLOBALS["name"] blablabla";
und immer wenn etwas in einer Variable gegeben wird (wenn man das so nennen kann) list er mit Sie nicht aus bzw. ich erhalte eine Fehlermeldung:

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/.sites/22/site232/web/gallery/g2data/smarty/templates_c/%%1309253035/%%1F^1FD^1FD2CF2E%%ViewCart.tpl.php on line 159

Wenn ich aber folgendes ändere:
PHP:
$nachricht = 'Name: $GLOBALS["name"] blablabla';
oder
PHP:
$nachricht = "Name: $GLOBALS['name'] blablabla";

Kommt zwar keine Fehlermeldung aber er liest mit halt die Variable nicht aus sondern schreibt $GLOBALS["name"] in den Quelltext.


Kann mir wer helfen? Hab zwar eine Manual (Link: Smarty) aber da find ich nichts.

Danke danke
 
Hi,

naja, im Template selbst kannst du glaube ich keinen PHP-Code verwenden (evtl über {literal}.. code {/literal})

Das Template System dient ja dazu, deine Ausgabe von der Logik in deiner Anwendung zu trennen, daher solltest du die ganzen Werte im PHP File auslesen und dann über die "Platzhalter" ({$varaible} in dein Smarty-Template einbauen)

Ich bin zwar auch noch kein Template-Profi, aber habe derzeit folgendes Strickmuster ;)
Im PHP-File:
PHP:
$smarty->assign(array(
    'wert1'=>$GLOBALS["name"],
    'wert2'=>$GLOBALS["foobar"],
));
Template:
PHP:
Hier steht der Wert {$wert1}.. ist Wert2 gesetzt? {if $wert2 != ""} ja {else} nein {/if}

So, vielleicht hilft es dir :)
-chris
 
Wenn das Template geladen wurde kannst du es mit eval() kompilen, dadurch würden Werte, die du in den Templatecode setzt ersetzt. Hierbei ist zu beachten, dass diese im Template mit <?PHP ?> umrahmt werden müssen, da sonst der Interpreter gar nicht ansprechen würde.

Hoff das hilft.

Gruß TvP
 
doch doch...ich kann PHP-Code benutzen

muss halt nur PHP starten mit {php} und beenden {/php}

also meine ganzen if Befehle funktionieren und auch das auslesen der Variablen in den if´s nur wenn ich es in eine Variable reinschreiben will geht nix mehr :(

Beispiel: (das steht in meiner *.tpl Datei)
PHP:
{php}

if($GLOBALS["send"]=="ok")
{
  if($GLOBALS["Vorname"] == "" || $GLOBALS["Nachname"] == "" || $GLOBALS["Adresse"] == "" || $GLOBALS["PLZ"] == "" || $GLOBALS["Ort"] == "" || $GLOBALS["Land"] == "" || $GLOBALS["Zahlungs"] == "" || $GLOBALS["Email"] == "")
    {
    echo "<b>Es ist ein Fehler bei der Bestellung aufgetreten!</b><br><br>Bitte fuellen Sie alle <font color=\"#000000\"><b>Pflichtfelder</b></font> aus.<br>Danke<br><br><a href=\"javascript:history.back()\">zur&uuml;ck zur Bestellung</a>";
    }
    else
    {
    echo "Danke für Ihre Bestellung!<br><br>Mit freundlichen Grüßen<br>Ihre Foto Horst Team";

        if($GLOBALS["Zahlungs"] == "Vorauskasse" || $GLOBALS["Zahlungs"]== "Digital_per_Mail")
        {
        echo "<br><br><b>Bankdaten:</b>
        Bank Austria<br>
        ";
        }

Bitte nicht über den Quellcode lachen mach das noch nicht solange ;-)
Simplcoding :-)
 
digifoho hat gesagt.:
PHP:
$nachricht = "Name: $GLOBALS["name"] blablabla";
und immer wenn etwas in einer Variable gegeben wird (wenn man das so nennen kann) list er mit Sie nicht aus bzw. ich erhalte eine Fehlermeldung:

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/.sites/22/site232/web/gallery/g2data/smarty/templates_c/%%1309253035/%%1F^1FD^1FD2CF2E%%ViewCart.tpl.php on line 159

Wenn ich aber folgendes ändere:
PHP:
$nachricht = 'Name: $GLOBALS["name"] blablabla';
oder
PHP:
$nachricht = "Name: $GLOBALS['name'] blablabla";

Kommt zwar keine Fehlermeldung aber er liest mit halt die Variable nicht aus sondern schreibt $GLOBALS["name"] in den Quelltext.


Kann mir wer helfen? Hab zwar eine Manual (Link: Smarty) aber da find ich nichts.

Danke danke

Ändere mal den Code wie folgt:

PHP:
$nachricht = 'Name: '.$GLOBALS["name"].' blablabla';

Solltest dir auf jeden Fall angewöhnen, Code und Zeichenketten für dich und für den Interpreter sichtbar zu trennen.

Im ersten Beispiel wird z.B. dein ArrayIdentifer einfach ausgeklammert :-)
 
Gut, dann wird dein Templatesystem das für dich übernehmen, {php} würde in <?PHP umgewandelt bevor das TPL interpretiert wird :-)
Ich war der Meinung, du selber liest die TPLs ein. ;-)
 
digifoho hat gesagt.:
doch doch...ich kann PHP-Code benutzen

muss halt nur PHP starten mit {php} und beenden {/php}

also meine ganzen if Befehle funktionieren und auch das auslesen der Variablen in den if´s nur wenn ich es in eine Variable reinschreiben will geht nix mehr :(

Beispiel: (das steht in meiner *.tpl Datei)
PHP:
{php}

if($GLOBALS["send"]=="ok")
{
  if($GLOBALS["Vorname"] == "" || $GLOBALS["Nachname"] == "" || $GLOBALS["Adresse"] == "" || $GLOBALS["PLZ"] == "" || $GLOBALS["Ort"] == "" || $GLOBALS["Land"] == "" || $GLOBALS["Zahlungs"] == "" || $GLOBALS["Email"] == "")
    {
    echo "<b>Es ist ein Fehler bei der Bestellung aufgetreten!</b><br><br>Bitte fuellen Sie alle <font color=\"#000000\"><b>Pflichtfelder</b></font> aus.<br>Danke<br><br><a href=\"javascript:history.back()\">zur&uuml;ck zur Bestellung</a>";
    }
    else
    {
    echo "Danke für Ihre Bestellung!<br><br>Mit freundlichen Grüßen<br>Ihre Foto Horst Team";

        if($GLOBALS["Zahlungs"] == "Vorauskasse" || $GLOBALS["Zahlungs"]== "Digital_per_Mail")
        {
        echo "<br><br><b>Bankdaten:</b>
        Bank Austria<br>
        ";
        }

Bitte nicht über den Quellcode lachen mach das noch nicht solange ;-)
Simplcoding :-)

Was mich wundert ist, warum stehen die einzelnen Variablen alle in Globals?
Das ist Sicherheitstechnisch argh bedenklich?
Bekommst du die Variablen per _GET oder _POST?
Es gibt hier nen coolen Threat, zwecks Sicherheit in PHP, hab leider gerade den Link nicht dazu. Das solltest du dir auf jeden Fall zur gemüte ziehen.

Gruß TvP
 
Zurück