Smarty を使った開発でデバッグを行う 4 つの方法
PHP のテンプレートエンジン Smarty を使って開発するときに,割り当てた変数が複雑になって困ることはありませんか?
その際,何らかの方法を使って割り当てた変数を確認するのですが,いくつか方法があります.
1. 常にデバッギングコンソールを表示する方法
おそらく一番有名な方法ですが,$debugging に true を指定して,常にデバッギングコンソールを表示する方法です.
require_once 'Smarty.class.php';
$smarty = new Smarty;
$smarty->debugging = true;
これで,常にデバッギングコンソールが表示されます.
デバッギングコンソールは,window.open() を使った JavaScript によるポップアップウィンドウですが,以下のように _smarty_debug_output に html を割り当てることで,ドキュメント中に埋め込むことができます.
require_once 'Smarty.class.php';
$smarty = new Smarty;
$smarty->debugging = true;
$smarty->assign('_smarty_debug_output', 'html'); // 'html' を '' にするとポップアップ
- ref.: $debugging
http://smarty.php.net/manual/en/variable.debugging.php
2. URL に SMARTY_DEBUG が含まれる場合にデバッギングコンソールを表示する方法
$debugging_ctrl に 'URL' を指定して,URL に QUERY_STRING が含まれる場合にデバッギングコンソールを表示する方法です.
require_once 'Smarty.class.php';
$smarty = new Smarty;
$smarty->debugging_ctrl = 'URL'; // 解除は 'NONE'
このように設定して,
という URL の場合には,
このようにすれば,デバッギングコンソールが表示されます.
ちなみに,SMARTY_DEBUG=off の場合は,デバッギングコンソールは表示されません.
$debugging = true の場合は,この設定は無視されます.
- ref.: $debugging_ctrl
http://smarty.php.net/manual/en/variable.debugging.ctrl.php
3. テンプレート変数 debug を利用してデバッギングコンソールを表示する方法
デバッギングコンソールはテンプレート変数を使っても表示することができます.
{debug}
たったこれだけです.$debugging や $debugging_ctrl の設定にかかわらず表示されます.
ポップアップ式ではないデバッギングコンソールをドキュメントに埋め込むには以下のようにします.
{debug output='html'}
- ref.: {debug}
http://smarty.php.net/manual/en/language.function.debug.php
4. debug_print_var 修正子を利用して,割り当てられた変数を表示する方法
この方法はドキュメントに載っていないのですが,上記 3 つのデバッギングコンソールを表示する方法とは異なり,1 つの変数の内容を表示するものです.
$foo = array(
'a' => 'あ',
'b' => 'い',
'c'=> array(
'd' => 'う'
)
);
$smarty->assing('foo', $foo);
上記のように,配列が割り当てられた場合は,
{$foo|@debug_print_var} {* $foo は配列なので @ が必要 *}
このようにすることで,以下のように $foo の内容だけが出力されます.
Array (3)
a => あ
b => い
c => Array (1)
d => う
debug_print_var はプラグインとして含まれてますが,ドキュメントには載っていません.
しかし,デフォルトのデバッギングコンソール用のテンプレート debug.tpl で使われています.
debug_print_var はデフォルトでは 40 文字で表示が切られてしまいます.これはオプションで調節できます.
例えば 100 文字まで表示する場合は,以下のように指定してあげれば OK です.
{$foo|@debug_print_var:0:100}
100 の前のオプションの 0 は,配列やオブジェクトを表示する際のインデント幅です.
- おまけ
Smarty のテンプレート内で JavaScript を書く場合 { } がテンプレート変数として扱われるので {literal} で囲むのが面倒だとか,JavaScript の中にテンプレート変数を割り当てられないだとか耳にすることがあります.
この場合は,テンプレート変数の { } を変更すればいいです.
require_once 'Smarty.class.php';
$smarty = new Smarty;
$smarty->left_delimiter = '<{';
$smarty->right_delimiter = '}>';
上記の設定は XOOPS が使っているもので,テンプレート変数は以下のよう記述します.
<{$foo}>
これを使うと,以下のように JavaScript を場合に {literal} で囲む必要もありませんし,JavaScript の中にテンプレート変数を割り当てることもできます.
<script type="text/javascript">
function foo() {
var a = '<{$foo|escape:"javascript"}>';
};
</script>
- Smarty 入門 PHP5+テンプレート・エンジンでつくる MVC アプリケーション
http://www.amazon.co.jp/o/ASIN/4798108839/todaysnonsenc-22/ref=nosim/
山田 祥寛 (著)
翔泳社
ISBN: 4798108839
2005/3/15
2,940 円