Cómo depurar variables en Smarty como en PHP var_dump ()

163

Tengo algunas variables dentro de una plantilla y no sé dónde las asigné. Necesito saber qué hay dentro de una variable particular; por ejemplo, digamos que tengo una variable en smarty llamada member. Lo intenté {debug}pero no funcionó y no se mostró ninguna ventana emergente.

¿Cómo puedo generar / depurar variables inteligentes utilizando algo como var_dump()dentro de las plantillas?

desfile de calle
fuente

Respuestas:

329

Puedes usar {php}etiquetas

Método 1 (no funcionará en Smarty 3.1 o 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
fuente
Recurrir a las etiquetas php no es una buena práctica e idealmente deberían deshabilitarse por razones de seguridad de todos modos. @debug_print_var (ver respuesta de Chris) es una solución mucho mejor.
thelem
1
Con la última versión de Smarty deshabilitando las {php}...{/php}etiquetas, los Métodos 2 o 3 son mejores opciones.
Luke Stevenson
1
La salida se ve aún mejor si la rodea con etiquetas <pre>. Los métodos anteriores son los mejores.
Alexander Kludt
2
Agregue un parámetro adicional a print_r () para que devuelva la salida a smarty, para evitar un eco adicional al final: {$ var | @print_r: true}
ivanhoe
120

Esto debería funcionar:

{$var|@print_r}

o

{$var|@var_dump}

El @ es necesario para que las matrices hagan que Smarty ejecute el modificador contra todo, de lo contrario lo hace para cada elemento.

Tom Haigh
fuente
8
Mucho mejor que la respuesta elegida.
Damien
mejor que la respuesta elegida? srsly? la respuesta elegida también tiene esas soluciones, pero solo contiene una más para versiones anteriores de smarty, por lo que realmente no puedo entender cómo podría decir que es mejor que la elegida xD
oliiix
24

Por lo que vale, puede hacer {$varname|@debug_print_var}para obtener una var_dump()salida -esque para su variable.

Chris
fuente
A veces no está seguro de lo que es la variable y muchas veces @print_ry @var_dumpno funcionó (en X-Cart, por ejemplo), pero @debug_print_varla producción fue de allí.
skobaljic
¡Muchas gracias! Tu respuesta es la única que funciona de mí.
Tana
10

solo usa {debug} en tu .tpl y mira tu código fuente

david
fuente
3
Agradable. En realidad, esto creó una ventana emergente para mí, por lo que no tuve que mirar la fuente. Sin embargo, tuve que desactivar mi bloqueador de ventanas emergentes.
Hobo
6

En el nuevo Smarty es:

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

Pruebe con la sesión Smarty:

{$smarty.session|@debug_print_var}

o

{$smarty.session|@print_r}

Para embellecer su salida, úsela entre <pre> </pre>etiquetas

karadayi
fuente
2

Si quieres algo más bonito te aconsejaría

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

basta con sustituir yourvariable por la variable

Bastilol
fuente
1

intente esto ... Establezca $debugging en VERDADERO en Smarty.

RubyDubee
fuente
Seguro que lo sé, pero necesito hacerlo sin modificar los archivos php principales
streetparade
1

Para depurar en smarty en prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Una etiqueta de depuración útil adicional:

{debug}
Aurelink
fuente
1

en smarty V3 puedes usar esto

{var_dump($variable)}

Awais fiaz
fuente
0

En smarty hay un modificador incorporado que puede usar usando |(operador de canalización simple). Al igual que esto {$varname|@print_r}imprimirá valor comoprint_r($php_variable)

Pranav Bhatt
fuente
0

Prefiero usar <script>console.log({$varname|@json_encode})</script>para iniciar sesión en la consola.

Peter van Sark
fuente
0

{$variable|@debug_print_var nofilter}y no necesita agregar <pre>etiquetas " "

{$variable|var_dump}mostrarle más (pero peor formato) porque debug_print_varno muestra variables privadas en el objeto!

r_a_f
fuente