So debuggen Sie Variablen in Smarty wie in PHP var_dump ()


163

Ich habe einige Variablen in einer Vorlage und weiß nicht, wo ich sie zugewiesen habe. Ich muss wissen, was sich in einer bestimmten Variablen befindet. Angenommen, ich habe eine Variable in smarty namens member. Ich habe es versucht, {debug}aber es hat nicht funktioniert und es wurde kein Popup angezeigt.

Wie kann ich Smarty-Variablen mithilfe von var_dump()Vorlagen ausgeben / debuggen ?

Antworten:


328

Sie können {php}Tags verwenden

Methode 1 (funktioniert in Smarty 3.1 oder höher nicht):

{php}

$var =
$this->get_template_vars('var');
var_dump($var);

{/php}

Methode 2:

{$var|@print_r}

Methode 3:

{$var|@var_dump}

Der Rückgriff auf PHP-Tags ist keine gute Praxis und sollte im Idealfall aus Sicherheitsgründen sowieso deaktiviert werden. @debug_print_var (siehe Antwort von Chris) ist eine viel bessere Lösung.
Thelem

1
Mit der neuesten Version von Smarty, die die {php}...{/php}Tags deaktiviert , sind die Methoden 2 oder 3 bessere Optionen.
Luke Stevenson

1
Die Ausgabe sieht noch besser aus, wenn Sie sie mit <pre> -Tags umgeben. Die oben genannten Methoden sind die besten.
Alexander Kludt

2
Fügen Sie print_r () einen zusätzlichen Parameter hinzu, damit die Ausgabe an smarty zurückgegeben wird, um ein zusätzliches Echo am Ende zu vermeiden: {$ var | @print_r: true}
ivanhoe

120

Das sollte funktionieren:

{$var|@print_r}

oder

{$var|@var_dump}

Das @ wird für Arrays benötigt, damit Smarty den Modifikator für das Ganze ausführt, andernfalls für jedes Element.


8
Viel besser als die gewählte Antwort.
Damien

besser als die gewählte Antwort? srsly? Die gewählte Antwort enthält auch diese Lösungen, enthält jedoch nur eine weitere für ältere Smarty-Versionen, sodass ich nicht wirklich
verstehen

24

Für das, was es wert ist, können Sie {$varname|@debug_print_var}eine var_dump()-esque-Ausgabe für Ihre Variable erhalten.


Manchmal sind Sie nicht sicher , was die Variable ist und viele Male @print_rund @var_dumphat nicht funktioniert (in x-cart zum Beispiel), aber @debug_print_varAusgang war da.
Skobaljic

Vielen Dank! Ihre Antwort ist die einzige, die von mir funktioniert.
Tana

10

Verwenden Sie einfach {debug} in Ihrer .tpl und sehen Sie sich Ihren Quellcode an


3
Nett. Dadurch wurde tatsächlich ein Popup-Fenster für mich erstellt, sodass ich nicht auf die Quelle schauen musste. Musste meinen Popup-Blocker allerdings deaktivieren.
Hobo


5

Probieren Sie es mit der Smarty Session aus:

{$smarty.session|@debug_print_var}

oder

{$smarty.session|@print_r}

Verwenden Sie es zwischen <pre> </pre>Tags, um Ihre Ausgabe zu verschönern


2

Wenn Sie etwas Schöneres wollen, würde ich raten

{"<?php\n\$data =\n"|@cat:{$yourvariable|@var_export:true|@cat:";\n?>"}|@highlight_string:true}

Ersetzen Sie einfach Ihre Variable durch Ihre Variable


1

Versuchen Sie dies .... Setzen Sie $debugging in Smarty auf TRUE.


Sicher, ich weiß das, aber ich muss es tun, ohne die Kern-PHP-Dateien zu
modifizieren

1

So debuggen Sie in Smarty in Prestashop 1.6.x:

{ddd($variable)} -> debug and die

{ppp($variable)} -> debug only

Ein weiteres nützliches Debug-Tag:

{debug}


0

In smarty ist ein Modifikator integriert, den Sie mithilfe von |(einzelner Pipeline-Operator) verwenden können. So {$varname|@print_r}wird der Wert als gedrucktprint_r($php_variable)


0

Ich bevorzuge es, mich <script>console.log({$varname|@json_encode})</script>bei der Konsole anzumelden.


0

{$variable|@debug_print_var nofilter}und Sie müssen keine " <pre>" Tags hinzufügen

{$variable|var_dump}Zeigen Sie mehr (aber schlechtere Formatierung), weil debug_print_varkeine private Variable im Objekt angezeigt wird!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.