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?

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}

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.


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.


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


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


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


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


1

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


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}


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)


0

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


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!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.