PHP var_dump()のようにSmartyで変数をデバッグする方法


163

テンプレート内にいくつかの変数があり、どこに割り当てたのかわかりません。特定の変数の中に何があるかを知る必要があります。たとえば、smartyにという変数があるとしmemberます。試してみました{debug}が、機能せず、ポップアップも表示されませんでした。

var_dump()テンプレート内などを使用してsmarty変数を出力/デバッグするにはどうすればよいですか?

回答:


328

{php}タグが使えます

方法1(Smarty 3.1以降では機能しません):

{php}

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

{/php}

方法2:

{$var|@print_r}

方法3:

{$var|@var_dump}

phpタグを使用することはお勧めできません。理想的には、セキュリティ上の理由から無効にする必要があります。@debug_print_var(Chrisの回答を参照)は、はるかに優れたソリューションです。
thelem

1
Smartyの最新バージョンでは{php}...{/php}タグを無効にしているため、方法2または3がより良いオプションです。
ルークスティーブンソン2013年

1
<pre>タグで囲むと、出力はさらに良くなります。上記の方法が最適です。
Alexander Kludt 14

2
最後に余分なエコーが発生しないように、print_r()に追加のパラメーターを追加して出力をsmartyに返すようにします。{$ var | @print_r:true}
ivanhoe

120

これはうまくいくはずです:

{$var|@print_r}

または

{$var|@var_dump}

@は、配列が修飾子を全体に対してスマートに実行するために必要です。それ以外の場合は、各要素に対して実行されます。


8
選択した答えよりもはるかに優れています。
ダミアン

選択した答えよりも良いですか?srsly?選択された回答にもこれらのソリューションが含まれていますが、古いsmartyバージョン用のソリューションが1つだけ含まれているため、選択された1つのxDよりも優れているとは言えません
oliiix

24

価値があることについては、変数の-esque出力{$varname|@debug_print_var}を取得することができvar_dump()ます。


変数が何であるかわからないことがよくあり、何度@print_rも機能@var_dumpしませんでしたが(たとえば、x-cartで)、@debug_print_var出力はありました。
skobaljic 2013年

本当にありがとう!あなたの答えが私を形作る唯一のものです。
タナ

10

.tplで{debug}を使用して、ソースコードを確認するだけです


3
いいね。これにより実際にポップアップウィンドウが作成されたので、ソースを見る必要がありませんでした。私のポップアップブロッカーを無効にする必要がありましたが。
Hobo 2012


5

Smartyセッションで試してください:

{$smarty.session|@debug_print_var}

または

{$smarty.session|@print_r}

出力を美しくするには、<pre> </pre>タグ間で使用します


2

あなたが何かもっときれいにしたいなら私は助言します

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

yourvariableをあなたの変数に置き換えるだけです


1

これを試してください... $debugging SmartyでTRUEに設定します。


確かにわかっていますが、コアのphpファイルを変更せずに実行する必要があります
streetparade

1

prestashop 1.6.xでsmartyでデバッグするには:

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

{ppp($variable)} -> debug only

他の便利なデバッグタグ:

{debug}


0

smartyには、|(単一のパイプライン演算子)を使用して使用できる修飾子が組み込まれています。この{$varname|@print_r}ように値を出力しますprint_r($php_variable)



0

{$variable|@debug_print_var nofilter}<pre>」タグを追加する必要はありません

{$variable|var_dump}debug_print_varオブジェクトにプライベート変数を表示しないため、より多くの(しかしより悪いフォーマット)を表示します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.