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'


  このように設定して,

http://example.com/foo.php?bar=baz

  という URL の場合には,

http://example.com/foo.php?bar=baz&SMARTY_DEBUG

  このようにすれば,デバッギングコンソールが表示されます.
  ちなみに,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 アプリケーション
  4798108839
  http://www.amazon.co.jp/o/ASIN/4798108839/todaysnonsenc-22/ref=nosim/
  山田 祥寛 (著)
  翔泳社
  ISBN: 4798108839
  2005/3/15
  2,940 円