Comment déboguer des variables dans Smarty comme dans PHP var_dump ()

164

J'ai quelques variables dans un modèle et je ne sais pas où je les ai attribuées. J'ai besoin de savoir ce qu'il y a à l'intérieur d'une variable particulière; par exemple, disons que j'ai une variable dans smarty appelée member. J'ai essayé avec {debug}mais cela n'a pas fonctionné et aucune fenêtre contextuelle n'a été affichée.

Comment puis-je générer / déboguer des variables smarty en utilisant quelque chose comme var_dump()à l'intérieur des modèles?

streetparade
la source

Réponses:

330

Vous pouvez utiliser des {php}balises

Méthode 1 (ne fonctionnera pas dans Smarty 3.1 ou version ultérieure):

{php}

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

{/php}

Méthode 2:

{$var|@print_r}

Méthode 3:

{$var|@var_dump}
pinaki
la source
Le recours aux balises php n'est pas une bonne pratique et, idéalement, ils devraient de toute façon être désactivés pour des raisons de sécurité. @debug_print_var (voir la réponse de Chris) est une bien meilleure solution.
thelem
1
Avec la dernière version de Smarty désactivant les {php}...{/php}balises, les méthodes 2 ou 3 sont de meilleures options.
Luke Stevenson
1
La sortie est encore meilleure si vous l'entourez de balises <pre>. Les méthodes ci-dessus sont les meilleures.
Alexander Kludt
2
Ajoutez un paramètre supplémentaire à print_r () pour lui faire renvoyer la sortie à smarty, pour éviter un écho supplémentaire à la fin: {$ var | @print_r: true}
ivanhoe
120

Cela devrait fonctionner:

{$var|@print_r}

ou

{$var|@var_dump}

Le @ est nécessaire pour que les tableaux permettent à smarty d'exécuter le modificateur sur l'ensemble, sinon il le fait pour chaque élément.

Tom Haigh
la source
8
Beaucoup mieux que la réponse choisie.
Damien
mieux que la réponse choisie? srsly? la réponse choisie contient également ces solutions, mais en contient une de plus pour les anciennes versions de smarty, donc je ne peux pas vraiment comprendre comment vous pourriez dire que c'est mieux que la
solution
24

Pour ce que ça vaut, vous pouvez faire {$varname|@debug_print_var}pour obtenir une var_dump()sortie -esque pour votre variable.

Chris
la source
Parfois, vous n'êtes pas sûr de la variable et souvent @print_ret @var_dumpn'a pas fonctionné (dans x-cart par exemple), mais@debug_print_var sortie était là.
skobaljic
Merci beaucoup! Votre réponse est la seule qui fonctionne de moi.
Tana
10

utilisez simplement {debug} dans votre .tpl et regardez votre code source

David
la source
3
Agréable. Cela a en fait créé une fenêtre pop-up pour moi, donc je n'ai pas eu à regarder la source. J'ai dû désactiver mon bloqueur de fenêtres contextuelles.
Hobo
6

Dans le nouveau Smarty, c'est:

<pre>
{var_dump($variable)}
</pre>
Alexandre Zakusilo
la source
5

Essayez avec la session Smarty:

{$smarty.session|@debug_print_var}

ou

{$smarty.session|@print_r}

Pour embellir votre sortie, utilisez-le entre les <pre> </pre>balises

Karadayi
la source
2

Si vous voulez quelque chose de plus joli, je vous conseillerais

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

remplacez simplement votre variable par votre variable

Bastilol
la source
1

essayez ceci ... Réglez $debugging sur TRUE dans Smarty.

RubyDubee
la source
Bien sûr, je le sais, mais je dois le faire sans modifier les fichiers php de base
streetparade
1

Pour déboguer dans smarty dans prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Une autre balise de débogage utile:

{debug}
Aurelink
la source
1

dans smarty V3, vous pouvez utiliser ceci

{var_dump($variable)}

Awais fiaz
la source
0

Dans smarty, il existe un modificateur intégré que vous pouvez utiliser en utilisant |(opérateur de pipeline unique). Comme ceci {$varname|@print_r}affichera la valeur commeprint_r($php_variable)

Pranav Bhatt
la source
0

Je préfère utiliser <script>console.log({$varname|@json_encode})</script>pour me connecter à la console.

Peter van Sark
la source
0

{$variable|@debug_print_var nofilter}et vous n'avez pas besoin d'ajouter de <pre>balises " "

{$variable|var_dump}vous en montrer plus (mais le formatage est pire) car debug_print_varne pas afficher de variable privée dans l'objet!

r_a_f
la source