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 ?

Straßenparade
quelle

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}
Pinaki
quelle
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.

Tom Haigh
quelle
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.

Chris
quelle
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

David
quelle
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
6

Im neuen Smarty ist es:

<pre>
{var_dump($variable)}
</pre>
Alexander Zakusilo
quelle
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

Karadayi
quelle
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

Bastilol
quelle
1

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

RubyDubee
quelle
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}
Aurelink
quelle
1

In Smarty V3 können Sie dies verwenden

{var_dump($variable)}

Awais fiaz
quelle
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)

Pranav Bhatt
quelle
0

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

Peter van Sark
quelle
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!

r_a_f
quelle