Smarty Tips :: テンプレート関数プラグイン
2008年10月10日 20:38
こんばんは。
午前中に、ぷれ大掃除(笑)をした掛尾です。
今回は、意外と知られていない(?)Smartyのプラグインのひとつ、テンプレート関数プラグインについて書いてみようと思います。
Smartyでは、標準で使用できる{assign}や{html_options}といったカスタム関数があります。
でも、そのまま使うとなると、意外と使い勝手が悪かったり、融通が利かなかったりと、まぁ、いろいろ大人の事情ができてきます(笑)
そんなわけで、カスタム関数をもう少しカスタムして、DBからのデータをテンプレート側から直接呼び出せるプラグインを作ってみます。
さて、大人の事情で、例えばWEBページの右サイドにDBから取得してきたインフォメーションのデータを、タイトルにページへのリンクを張った一覧で10件、表示常に表示したいとしましょう。
普通(?)なら、各ページのPHPもしくは、テンプレートに直接書いたりインクルードしたりするでしょうか?
しかし、これではちょっとした修正をするのにも、一苦労になりそうな予感がプンプンしますよね(^-^;
というわけで、テンプレート関数プラグインを作成しましょう。
まず、Smartyの標準プラグイン達は、Smarty/plugins/に入っています。
$plugins_dirで設定もできますが、ここでは忘れます(笑)
その中に、以下のような感じの関数を書いて、plulgins/の中に保存します。
プラグインのファイル名には規則があって、関数名が「smarty_function_AAA()」なら、ファイル名は「function.AAA」としないとダメです。
今回の場合は「smarty_function_info_list」なので、「function.info_list.php」となります。
function smarty_function_info_list( $params, &$smarty ){ // 〜 ここで、DBに接続して、LIMIT 10でデータを取得 〜 // $db_data:取得したデータ配列 // smarty変数に割当 $smarty->assign( $params['info_list_assign'], $db_data ); }
これで、プラグインは完成です。
このプラグインをテンプレートの何処からでも呼び出せるようになりました。
次は、呼び出すテンプレート側です。
挿入したい箇所に、以下のように書きます。
{* プラグイン関数からデータを取得 *} {info_list info_list_assign="list"} <div> <h2>Information</h2> <ul> {foreach item="list" from=$list} <li><a href="info.php?id={$list.id}">{$list.str_title|strip_tags:false}</a></li> {/foreach} </ul> </div>
1行目の{info_list info_list_assign="list"}は{関数名 受け取る$paramsのキー名 割り当てる変数}となっています。
あとは、通常通り{foreach}や{section}で配列を回して、一覧を作っていくだけです。
そして、使いたいテンプレートに上記のテンプレートをincludeすれば、修正する時もたった1ヶ所修正すればOKですよね(*^_^*)
プラグインは、使い出すと便利で意外とクセになるので、僕は常用しているのですが、他人がソースを見た時に関連性が解りにくいという理由で嫌う方もいるので、その辺はご注意を(笑)
次回は修飾子プラグインについて…としておきましょうか(笑)
※参考URL:Smarty::テンプレート関数プラグイン
※このスクリプトにおいて、動作の検証は行っていませんので、責任は一切負いません。
徳島県徳島市名東町
tel/fax 088-635-5859
営業時間 平日 10:00〜18:00
※打ち合わせ等で不在の場合は、お電話でのお問い合わせに対応できない場合がありますので、ご了承ください。
徳島・香川・愛媛・高知および大阪・京都を中心にご依頼を承ります。その他の地域でも、メール・お電話・FAX・Skype等での作業が可能であれば柔軟に対応いたします。