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.