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?

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}

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.


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.


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


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,


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


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ą



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}


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)


0

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


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!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.