Como depurar variáveis ​​no Smarty como no PHP var_dump ()

163

Eu tenho algumas variáveis ​​dentro de um modelo e não sei onde as designei. Eu preciso saber o que está dentro de uma variável específica; por exemplo, digamos que eu tenha uma variável no smarty chamada member. Eu tentei com {debug}mas não funcionou, e nenhum pop-up foi mostrado.

Como posso gerar / depurar variáveis ​​smarty usando algo como var_dump()dentro dos modelos?

Desfile de rua
fonte

Respostas:

328

Você pode usar {php}tags

Método 1 (não funcionará no Smarty 3.1 ou posterior):

{php}

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

{/php}

Método 2:

{$var|@print_r}

Método 3:

{$var|@var_dump}
pinaki
fonte
Recorrer a tags php não é uma boa prática e, idealmente, eles devem ser desativados por motivos de segurança. @debug_print_var (ver resposta de Chris) é uma solução muito melhor.
Thelem
1
Com a versão mais recente do Smarty desativando as {php}...{/php}tags, os métodos 2 ou 3 são melhores opções.
Luke Stevenson
1
A saída fica ainda melhor se você a cercar com tags <pre>. Os métodos acima são os melhores.
Alexander Kludt
2
Adicione um parâmetro adicional ao print_r () para que ele retorne a saída ao smarty, para evitar um eco extra no final: {$ var | @print_r: true}
ivanhoe
120

Isso deve funcionar:

{$var|@print_r}

ou

{$var|@var_dump}

O @ é necessário para matrizes para que o smarty execute o modificador contra a coisa toda, caso contrário, ele faz isso para cada elemento.

Tom Haigh
fonte
8
Muito melhor do que a resposta escolhida.
Damien
melhor que a resposta escolhida? srsly? a resposta escolhida tem essas soluções nele também, mas contém apenas mais um para versões mais antigas do sabe tudo, então não posso realmente como você poderia dizer que é melhor do que o escolhido xD
oliiix
24

Pelo que vale a pena, você pode fazer {$varname|@debug_print_var}para obter uma var_dump()saída -esque para sua variável.

Chris
fonte
Às vezes, você não tem certeza de qual é a variável e muitas vezes @print_re @var_dumpnão funcionou (no x-cart, por exemplo), mas a @debug_print_varsaída estava lá.
skobaljic
Muito obrigado! Sua resposta é a única que funciona de mim.
Tana #
10

basta usar {debug} no seu .tpl e ver seu código-fonte

david
fonte
3
Agradável. Isso realmente criou uma janela pop-up para mim, então não precisei procurar a fonte. No entanto, tive que desativar o meu bloqueador de pop-ups.
Hobo
6

No novo Smarty é:

<pre>
{var_dump($variable)}
</pre>
Alexander Zakusilo
fonte
5

Experimente com a sessão Smarty:

{$smarty.session|@debug_print_var}

ou

{$smarty.session|@print_r}

Para embelezar sua saída, use-a entre <pre> </pre>tags

karadayi
fonte
2

Se você quiser algo mais bonito, eu aconselho

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

basta substituir yourvariable por sua variável

Bastilol
fonte
1

tente isso .... Defina $debugging como TRUE no Smarty.

RubyDubee
fonte
certeza eu sei disso, mas eu preciso fazê-lo sem modding os arquivos php núcleo
streetparade
1

Para depurar no smarty no prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Uma outra tag de depuração útil:

{debug}
Aurelink
fonte
1

no V3 inteligente você pode usar isso

{var_dump($variable)}

Awais fiaz
fonte
0

No smarty, existe um modificador embutido que você pode usar usando |(operador de pipeline único). Assim {$varname|@print_r}imprimirá o valor comoprint_r($php_variable)

Pranav Bhatt
fonte
0

Eu prefiro usar <script>console.log({$varname|@json_encode})</script>para fazer logon no console.

Peter van Sark
fonte
0

{$variable|@debug_print_var nofilter}e você não precisa adicionar <pre>tags " "

{$variable|var_dump}mostrar mais (mas pior formatação) porque debug_print_varnão mostra variável privada no objeto!

r_a_f
fonte