Jak debugować zmienne w Smarty, jak w PHP var_dump ()

164

Mam kilka zmiennych w szablonie i nie wiem, gdzie je przypisałem. Muszę wiedzieć, co znajduje się w określonej zmiennej; na przykład, powiedzmy, że mam zmienną w smarty o nazwie member. Próbowałem, {debug}ale to nie zadziałało i nie zostało wyświetlone żadne wyskakujące okienko.

Jak mogę wyprowadzać / debugować zmienne smarty, używając czegoś takiego jak var_dump()w szablonach?

Parada uliczna
źródło

Odpowiedzi:

330

Możesz używać {php}tagów

Metoda 1 (nie działa w Smarty 3.1 lub nowszym):

{php}

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

{/php}

Metoda 2:

{$var|@print_r}

Metoda 3:

{$var|@var_dump}
pinaki
źródło
Uciekanie się do tagów php nie jest dobrą praktyką i najlepiej byłoby je wyłączyć ze względów bezpieczeństwa. @debug_print_var (patrz odpowiedź od Chrisa) jest znacznie lepszym rozwiązaniem.
thelem
1
Po wyłączeniu {php}...{/php}tagów w najnowszej wersji Smarty Metody 2 lub 3 są lepszymi opcjami.
Luke Stevenson
1
Wyjście wygląda jeszcze lepiej, jeśli otoczysz go znacznikami <pre>. Powyższe metody są najlepsze.
Alexander Kludt,
2
Dodaj dodatkowy parametr do print_r (), aby zwracał wynik do smarty, aby uniknąć dodatkowego echa na końcu: {$ var | @print_r: true}
ivanhoe
120

To powinno działać:

{$var|@print_r}

lub

{$var|@var_dump}

Znak @ jest potrzebny tablicom, aby smarty uruchamiał modyfikator na całości, w przeciwnym razie robi to dla każdego elementu.

Tom Haigh
źródło
8
O wiele lepiej niż wybrana odpowiedź.
Damien
lepiej niż wybrana odpowiedź? srsly? wybrana odpowiedź zawiera również te rozwiązania, ale zawiera tylko jedno więcej dla starszych wersji smarty, więc nie bardzo wiem, jak można powiedzieć, że jest lepsze niż wybrana xD
oliiix
24

Bez względu na to, ile jest to warte, możesz zrobić, {$varname|@debug_print_var}aby uzyskać a var_dump()-esque wyjście dla swojej zmiennej.

Chris
źródło
Czasami nie jesteś pewien, jaka jest zmienna i wiele razy @print_ri @var_dumpnie działała (na przykład w x-cart), ale @debug_print_varwynik był tam.
skobaljic
Dzięki wielkie! Twoja odpowiedź jest jedyną, która działa na mnie.
Tana
10

po prostu użyj {debug} w swoim .tpl i spójrz na swój kod źródłowy

david
źródło
3
Miły. To faktycznie stworzyło dla mnie wyskakujące okienko, więc nie musiałem szukać źródła. Musiałem jednak wyłączyć blokowanie wyskakujących okienek.
Hobo,
6

W nowym Smarty jest to:

<pre>
{var_dump($variable)}
</pre>
Alexander Zakusilo
źródło
5

Wypróbuj z sesją Smarty:

{$smarty.session|@debug_print_var}

lub

{$smarty.session|@print_r}

Aby upiększyć swój wynik, użyj go między <pre> </pre>tagami

karadayi
źródło
2

Jeśli chcesz czegoś ładniejszego, radzę

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

wystarczy wymienić yourvariable przez zmienną

Bastilol
źródło
1

spróbuj tego .... Ustaw $debugging na TRUE w Smarty.

RubyDubee
źródło
jasne
1

Aby debugować w smarty w Prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Inny użyteczny tag debugowania:

{debug}
Aurelink
źródło
1

w smarty V3 możesz tego użyć

{var_dump($variable)}

Awais fiaz
źródło
0

W smarty jest wbudowany modyfikator, którego możesz użyć używając |(operator pojedynczego potoku). W ten sposób {$varname|@print_r}wypisze wartość jakoprint_r($php_variable)

Pranav Bhatt
źródło
0

Wolę używać <script>console.log({$varname|@json_encode})</script>do logowania się do konsoli.

Peter van Sark
źródło
0

{$variable|@debug_print_var nofilter}i nie musisz dodawać <pre>tagów „ ”

{$variable|var_dump}pokaże ci więcej (ale gorsze formatowanie), ponieważ debug_print_varnie pokazuje zmiennej prywatnej w obiekcie!

r_a_f
źródło