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?

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}

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.


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.


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


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


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


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


1

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


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}


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)


0

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


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!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.