ここは以前の ethna.jp サイトを表示したものです。ここにあるドキュメントはバージョン2.6以降更新されません。
最新のドキュメントは 現在のethna.jp を閲覧してください。現ドキュメントが整備されるまでは、ここを閲覧してください。

Smartyプラグインの作成

ここでは、Ethna 向けの Smarty プラグインの作成方法を説明します。

書いた人mumumu2009-06-21新規作成

Smartyプラグインの種別

Smarty のプラグインには様々な種類がありますが、原理的にEthnaでは全ての種類のSmartyプラグインを使うことができます。

主に使われるのはブロックプラグイン、関数プラグイン、修正子プラグインの3種類でしょう。

Ethna 2.5.0 以降のやり方

プラグインの作成

すべての種類の Smartyプラグインが Ethna で利用可能です。

Smartyプラグインの作成方法については、Smarty のマニュアル をご覧下さい。

プラグインの登録と使い方

app/Plugin/Smarty 以下に作成したプラグインを置いておけば、自動で Smartyプラグインの探索パスを通してあるため、ここに置いたプラグインは自動でEthnaが探してくれるようになっています。

よって、hoge プラグインを例にすると、以下のようにしてすぐに使うことができます。

{$app.test|hoge}
{hoge}
{hoge}{/hoge}

Ethna 2.3.x 以前のやり方

クラスのメソッドをSmartyFunctionとして登録する方法

以下のように配列で指定することでクラスのメソッドをsmarty_functionとして登録することが可能です。

   179     /**
   180      *  @var    array   smarty function定義
   181      */
   182     var $smarty_function_plugin = array(
   183         /*
   184          *  TODO: ここにユーザ定義のsmarty function一覧を記述してください
   185          *
   186          *  記述例:
   187          *
   188          *  'smarty_function_foo_bar',
   189          */
   190          array('HasteSmartyPlugins', 'form_name'),
   191          array('HasteSmartyPlugins', 'form_input'),
   192          array('HasteSmartyPlugins', 'rss'),

従来はグローバルの関数名を書いた文字列を列挙するが、クラスのメソッドの場合、

array('クラス名', 'メソッド')

とした配列を列挙する。*1

smartyの流儀でfunction, modifierなどを登録する

smartyは特定のディレクトリにsmartyの流儀でファイルを作れば自動的にmodifierなどを見付けてくれます。上の方法は、smartyの流儀によらずにアプリで用意したクラス関数をsmarty functionに登録するための方法です。

smartyの流儀に従う場合は、App_Controllerの中でファイルを置くディレクトリを指定します。たとえばアプリのlibディレクトリにsmartyディレクトリを用意する場合は、以下のように指定してください。

  • lib/smarty/function.sample.php (smarty functionを定義したファイル)
    function smarty_function_sample($params, &$smarty)
    {
        ...
    }
  • app/App_Controller.php
    var $directory = array(
        ...
        'plugins' => array('lib/smarty'), // ファイルを置いてあるディレクトリ
        ...
    );

smartyテンプレート内で {sample foo=bar} のように書くと、smartyはlib/smartyディレクトリ内から自動的にsample関数の定義を見付けてくれます。(くわしくはSmarty自体のドキュメントを参照してください)

注意: この場合、$smarty_function_pluginのほうは指定しないでください。指定すると、smartyはファイルを探さなくてもどこかに関数が定義されていると思い、「関数が見付からない」といったエラーを出すかもしれません。


*1 このあたりはsmartyのregister_functionメソッドのマニュアルを参照