ホーム > ブログ [果報は寝て待て] > Smarty Tips :: テンプレート関数プラグイン

ブログ [果報は寝て待て]|Blog

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」となります。

<?php
function smarty_function_info_list( $params, &amp;$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::テンプレート関数プラグイン
※このスクリプトにおいて、動作の検証は行っていませんので、責任は一切負いません。

shape DESIGN - シェイプデザイン, 徳島県徳島市名東町, tel/fax 088-635-5859, 営業時間 平日10:00〜18:00

まずはお気軽にお問い合わせください
お問い合わせ・お見積り・ご相談はこちら
お気軽にご相談ください

徳島県徳島市名東町
tel/fax 088-635-5859
営業時間 平日 10:00〜18:00

※打ち合わせ等で不在の場合は、お電話でのお問い合わせに対応できない場合がありますので、ご了承ください。

フォームからのお問い合わせ

徳島・香川・愛媛・高知および大阪・京都を中心にご依頼を承ります。その他の地域でも、メール・お電話・FAX・Skype等での作業が可能であれば柔軟に対応いたします。

  • Become our fan on Facebook, facebook.com/shape.design