How to Debug Variables in Smarty like in PHP var_dump()
Asked Answered
E

14

192

I have some variables inside a template and I don't know where I assigned them. I need to know what is inside a particular variable; for instance, say I have a variable in smarty called member. I tried with {debug} but it didn't work, and no popup was shown.

How can I output/debug smarty variables using something like var_dump() inside the templates?

Epiphenomenon answered 12/3, 2010 at 9:50 Comment(0)
A
380

You can use {php} tags

Method 1 (won't work in Smarty 3.1 or later):

{php}

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

{/php}

Method 2:

{$var|@print_r}

Method 3:

{$var|@var_dump}
Abbyabbye answered 12/3, 2010 at 10:3 Comment(5)
Resorting to php tags is not good practice and ideally they should be disabled for security reasons anyway. @debug_print_var (see answer from Chris) is a much better solition.Cislunar
With the latest version of Smarty disabling the {php}...{/php} tags, Methods 2 or 3 are better options.Welldressed
Output looks even better if you surround it with <pre> tags. Methods above are the best.Ithnan
Add an additional param to print_r() to make it return the output to smarty, to avoid an extra echo at the end: {$var|@print_r:true}Windtight
Most clean view of the variable gives {$var|@dump} and it doesn't even need to be wrapped with <pre></pre>. {$var|dump} works just the same on Smarty 3.Apiary
W
126

This should work:

{$var|@print_r}

or

{$var|@var_dump}

The @ is needed for arrays to make smarty run the modifier against the whole thing, otherwise it does it for each element.

Washboard answered 12/3, 2010 at 10:12 Comment(3)
A lot better then the chose answer.Yukyukaghir
better then the chosen answer? srsly? the chosen answer has those solutions in it too but just contains one more for older smarty versions, so I cannot really get how you could say it's better than the chosen one xDRecipience
@Recipience Just take a look at the revisions. In 2012 the answer was far away from where it is now!Roby
D
30

For what it's worth, you can do {$varname|@debug_print_var} to get a var_dump()-esque output for your variable.

Dunk answered 9/9, 2011 at 9:32 Comment(2)
Sometimes you are not sure what the variable is and many times @print_r and @var_dump did not work (in x-cart for example), but @debug_print_var output was there.Wellturned
Thanks so much! Your answer is the only that works form me.Hillard
O
13

just use {debug} in your .tpl and look at your sourcecode

Oocyte answered 28/4, 2011 at 12:10 Comment(1)
Nice. This actually created a pop-up window for me, so I didn't have to look at the source. Had to disable my pop-up blocker though.Hearne
L
7

In new Smarty it is:

<pre>
{var_dump($variable)}
</pre>
Leitao answered 6/3, 2017 at 19:46 Comment(0)
N
5

Try out with the Smarty Session:

{$smarty.session|@debug_print_var}

or

{$smarty.session|@print_r}

To beautify your output, use it between <pre> </pre> tags

Nambypamby answered 13/1, 2015 at 15:58 Comment(0)
O
3

try this .... Set $debugging to TRUE in Smarty.

Outcrop answered 12/3, 2010 at 9:54 Comment(1)
sure i know that, but i need to do it without modding the core php filesEpiphenomenon
J
2

I prefer to use <script>console.log({$varname|@json_encode})</script> to log to the console.

Jago answered 11/12, 2019 at 11:57 Comment(1)
Note: it's reqire to add a single quotes inside console.log('code');Borgerhout
W
1

To debug in smarty in prestashop 1.6.x :

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

{ppp($variable)} -> debug only

An onther usefull debug tag :

{debug}
Washy answered 26/6, 2017 at 13:9 Comment(0)
A
1

If you want something prettier I would advise

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

just replace yourvariable by your variable

Andreeandrei answered 13/11, 2017 at 14:36 Comment(0)
N
1

in smarty V3 you can use this

{var_dump($variable)}

Newspaperwoman answered 15/2, 2018 at 12:12 Comment(0)
M
1

{$variable|@debug_print_var nofilter} and you not need to add "<pre>" tags

{$variable|var_dump} show you more (but worse formatting) because debug_print_var not showing private variable in object!

Mawkish answered 1/4, 2020 at 12:9 Comment(0)
W
1

For better display :

{$var|@dump}
Waiter answered 10/11, 2022 at 11:42 Comment(0)
R
0

In smarty there is built in modifier you could use that by using | (single pipeline operator). Like this {$varname|@print_r} will print value as print_r($php_variable)

Rance answered 9/1, 2014 at 9:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.