コンポーネントされたテンプレート

このヒントはちょっとしたハックですが素晴らしいアイディアです。自己責任において使用して下さい ;-)

習慣的に、アプリケーションにテンプレートをプログラミングする手順は次のように進みます。はじめにphpアプリケーションにおいて変数を蓄積します(おそらくデータベースのクエリーによって)。それからSmartyオブジェクトを示して変数を割り当て、テンプレートを表示します。仮にテンプレート内に株式相場表示を持っているとします。これはphpアプリケーションにより株式情報のデータを収集し、テンプレートにこれらの変数を割り当てて表示します。もし、前もってデータを取得する事を気にせずに、テンプレートを単にインクルードする事で株式相場表示をアプリケーションに追加できれば良いと思いませんか?

内容をフェッチし、テンプレート変数に割り当てるためのカスタムプラグインを書くことで実現できます。

例 17-7. コンポーネントされたテンプレート

<?php

// プラグインディレクトリに "function.load_ticker.php" ファイルを入れる

// 株式情報のデータを取得するための関数を用意する
function fetch_ticker($symbol)
{
   
// 様々なリソースから$ticker_nameと$ticker_priceを
   // 取得するロジックをここに記述する
   
return $ticker_info;
}

function
smarty_function_load_ticker($params, &$smarty)
{
   
// 関数をコールする
   
$ticker_info = fetch_ticker($params['symbol']);
   
   
// テンプレート変数を割り当てる
   
$smarty->assign($params['assign'], $ticker_info);
}
?>
index.tpl
---------

{* Smarty *}

{load_ticker symbol="YHOO" assign="ticker"}

銘柄: {$ticker_name} 株価: {$ticker_price}