Bagaimana Debug Variabel di Smarty seperti di PHP var_dump ()

163

Saya memiliki beberapa variabel di dalam template dan saya tidak tahu di mana saya menugaskan mereka. Saya perlu tahu apa yang ada di dalam variabel tertentu; misalnya, katakan saya memiliki variabel dalam smarty disebut member. Saya mencoba {debug}tetapi tidak berhasil, dan tidak ada popup yang ditampilkan.

Bagaimana saya bisa menampilkan / men-debug variabel smarty menggunakan sesuatu seperti var_dump()di dalam templat?

streetparade
sumber

Jawaban:

328

Anda dapat menggunakan {php}tag

Metode 1 (tidak akan berfungsi di Smarty 3.1 atau yang lebih baru):

{php}

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

{/php}

Metode 2:

{$var|@print_r}

Metode 3:

{$var|@var_dump}
pinaki
sumber
Menggunakan tag php bukanlah praktik yang baik dan idealnya mereka harus dinonaktifkan karena alasan keamanan. @debug_print_var (lihat jawaban dari Chris) adalah solusi yang jauh lebih baik.
themem
1
Dengan Smarty versi terbaru menonaktifkan {php}...{/php}tag, Metode 2 atau 3 adalah opsi yang lebih baik.
Luke Stevenson
1
Output terlihat lebih baik jika Anda mengelilinginya dengan tag <pre>. Metode di atas adalah yang terbaik.
Alexander Kludt
2
Tambahkan param tambahan ke print_r () untuk membuatnya mengembalikan output ke smarty, untuk menghindari gema tambahan di akhir: {$ var | @print_r: true}
ivanhoe
120

Ini seharusnya bekerja:

{$var|@print_r}

atau

{$var|@var_dump}

@ Diperlukan untuk array agar smarty menjalankan modifier terhadap semua hal, jika tidak, ia melakukannya untuk setiap elemen.

Tom Haigh
sumber
8
Jauh lebih baik daripada jawaban yang dipilih.
Damien
lebih baik dari jawaban yang dipilih? srsly? jawaban yang dipilih memiliki solusi di dalamnya juga, tetapi hanya berisi satu lagi untuk versi smarty yang lebih tua, jadi saya tidak bisa benar-benar mengerti bagaimana Anda bisa mengatakan itu lebih baik daripada yang dipilih xD
oliiix
24

Untuk apa nilainya, Anda dapat melakukan {$varname|@debug_print_var}untuk mendapatkan var_dump()output -queque untuk variabel Anda.

Chris
sumber
Kadang-kadang Anda tidak yakin apa variabelnya dan berkali-kali @print_rdan @var_dumptidak berfungsi (dalam x-cart misalnya), tetapi @debug_print_varhasilnya ada di sana.
skobaljic
Terima kasih banyak! Jawaban Anda adalah satu-satunya yang berfungsi membentuk saya.
Tana
10

cukup gunakan {debug} di .tpl Anda dan lihat kode sumber Anda

David
sumber
3
Bagus. Ini sebenarnya menciptakan jendela pop-up untuk saya, jadi saya tidak perlu melihat sumbernya. Harus menonaktifkan pemblokir pop-up saya.
Hobo
6

Dalam Smarty baru itu adalah:

<pre>
{var_dump($variable)}
</pre>
Alexander Zakusilo
sumber
5

Cobalah dengan Sesi Smarty:

{$smarty.session|@debug_print_var}

atau

{$smarty.session|@print_r}

Untuk mempercantik hasil Anda, gunakan di antara <pre> </pre>tag

karadayi
sumber
2

Jika Anda menginginkan sesuatu yang lebih cantik saya sarankan

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

hanya mengganti yourvariable oleh variabel Anda

Bastilol
sumber
1

coba ini .... Setel $debugging ke TRUE di Smarty.

RubyDubee
sumber
yakin saya tahu itu, tetapi saya harus melakukannya tanpa modding file php inti
streetparade
1

Untuk debug di smarty di prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Tag debug bermanfaat lainnya:

{debug}
Aurelink
sumber
1

di smarty V3 Anda bisa menggunakan ini

{var_dump($variable)}

Tunggu fiaz
sumber
0

Di smarty ada modifier bawaan Anda bisa menggunakannya dengan menggunakan |(operator pipa tunggal). Seperti ini {$varname|@print_r}akan mencetak nilai sebagaiprint_r($php_variable)

Pranav Bhatt
sumber
0

Saya lebih suka menggunakan <script>console.log({$varname|@json_encode})</script>untuk masuk ke konsol.

Peter van Sark
sumber
0

{$variable|@debug_print_var nofilter}dan Anda tidak perlu menambahkan <pre>tag " "

{$variable|var_dump}menampilkan lebih banyak (tetapi lebih buruk memformat) karena debug_print_vartidak menampilkan variabel pribadi di objek!

r_a_f
sumber