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?

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}

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.


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.


À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


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


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


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


1

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


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}

1

no V3 inteligente você pode usar isso

{var_dump($variable)}


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)


0

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


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!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.