Come eseguire il debug di variabili in Smarty come in PHP var_dump ()


164

Ho alcune variabili all'interno di un modello e non so dove le ho assegnate. Devo sapere cosa c'è dentro una particolare variabile; per esempio, supponiamo che io abbia una variabile in smarty chiamata member. Ho provato con {debug}ma non ha funzionato e non è stato mostrato alcun popup.

Come posso generare / eseguire il debug delle variabili smarty usando qualcosa come var_dump()all'interno dei template?

Risposte:


330

Puoi usare i {php}tag

Metodo 1 (non funzionerà in Smarty 3.1 o versioni successive):

{php}

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

{/php}

Metodo 2:

{$var|@print_r}

Metodo 3:

{$var|@var_dump}

Ricorrere ai tag php non è una buona pratica e idealmente dovrebbero essere disabilitati per motivi di sicurezza. @debug_print_var (vedi la risposta di Chris) è una soluzione molto migliore.
— entro il

1
Con l'ultima versione di Smarty che disabilita i {php}...{/php}tag, i metodi 2 o 3 sono opzioni migliori.
— Luke Stevenson,

1
L'output appare ancora migliore se lo circondi con i tag <pre>. I metodi sopra sono i migliori.
— Alexander Kludt,

2
Aggiungi un parametro aggiuntivo a print_r () per fare in modo che restituisca l'output a smarty, al fine di evitare un ulteriore eco alla fine: {$ var | @print_r: true}
— ivanhoe,

120

Questo dovrebbe funzionare:

{$var|@print_r}

o

{$var|@var_dump}

@ È necessario affinché gli array facciano in modo che smarty esegua il modificatore su tutto il resto, altrimenti lo fa per ogni elemento.


8
Molto meglio della risposta scelta.
— Damien,

meglio della risposta scelta? srsly? la risposta scelta contiene anche quelle soluzioni ma ne contiene solo un'altra per le versioni smarty precedenti, quindi non riesco davvero a capire come si possa dire che è meglio di quella scelta xD
— oliiix

24

Per quello che vale, puoi fare {$varname|@debug_print_var}per ottenere un var_dump()output semplice per la tua variabile.


A volte non sei sicuro di quale sia la variabile e molte volte @print_re @var_dumpnon ha funzionato (ad esempio in x-cart), ma l' @debug_print_varoutput era lì.
— skobaljic,

Grazie mille! La tua risposta è l'unica che funziona da me.
— Tana,

10

usa {debug} nel tuo .tpl e guarda il tuo codice sorgente


3
Bello. Questo in realtà ha creato una finestra pop-up per me, quindi non ho dovuto guardare la fonte. Ho dovuto disabilitare il mio blocco pop-up però.
— Hobo,


5

Prova con la Smarty Session:

{$smarty.session|@debug_print_var}

o

{$smarty.session|@print_r}

Per abbellire il tuo output, usalo tra i <pre> </pre>tag


2

Se vuoi qualcosa di più bello ti consiglierei

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

sostituisci semplicemente la tua variabile con la tua variabile



1

Per eseguire il debug in smarty in prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Un altro utile tag di debug:

{debug}


0

In smarty è presente un modificatore incorporato che è possibile utilizzare utilizzando |(singolo operatore pipeline). In questo modo {$varname|@print_r}verrà stampato il valore comeprint_r($php_variable)


0

Preferisco usare <script>console.log({$varname|@json_encode})</script>per accedere alla console.


0

{$variable|@debug_print_var nofilter}e non è necessario aggiungere " <pre>" tag

{$variable|var_dump}mostra di più (ma peggio formattazione) perché debug_print_varnon mostra la variabile privata nell'oggetto!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.