目次

プラグイン導入の例

このドキュメントでは、新しい種類のプラグインを導入するための全体的な流れの説明をします。具体例として、絵文字を扱うライブラリをプラグインとして用意することを考えます。(重要な注意: この内容はあくまで プラグイン導入のための概要的な例 で、細かい実装や絵文字の話はかなりてきとうです!)

おおまかな仕様を決める

携帯電話とPCから見られるサイトで絵文字を導入したくなったとします。

そこで $type = 'emoji' なるプラグインを導入することにします。emojiプラグインは $name = 'au', 'docomo', 'pc', 'softbank' *1 の 4 種類を用意します。

また、このプラグインは他のアプリケーションでも使いそうなので、プラグインとしてはアプリではなくEthna本体に付属させる形にします。もしアプリに付属させる場合は、以下のプラグインを作る場面で

親クラスを作る

プラグインの親クラスを作ります。$nameに共通したメソッドをここで定義しておきます。

プラグインを作る

$name = 'pc' ならば次のような感じになります。親クラスのabstractなメソッドの実装をします。

action formに入力フィルタを追加する

action formではフィルタとしてこのプラグインを使いたいので、アプリケーションのaction formの基底クラス app/Sample_ActionForm.php に次の内容を追加してフィルタ 'emoji_encode' を用意します。($this->ctl->getCareer()でキャリアが区別できるものとします)

function _filter_emoji_encode($value)
{
    $emoji =& $this->plugin->getPlugin('Emoji', $this->ctl->getCareer());
    return $emoji->encode($value);
}

view classに出力フィルタを追加する

まるまる出力フィルタにしてしまってもいいですが、必要なところだけ絵文字のdecodeをするほうが効率がいいので、smartyのmodifierとして登録することにします。

アプリケーションのviewの基底クラス app/Sample_ViewClass.php に次の内容を追加して、{$text|emoji} というかんじのsmarty modifierを用意します。

function _setDefault(&$renderer)
{
    $smarty =& $renderer->getEngine();

    $emoji =& $this->plugin->getPlugin('Emoji', $this->ctl->getCareer());
    $smarty->register_modifier('emoji', array(&$emoji, 'decode'));
}

絵文字用の文字数カウント

action formのバリデータで、max, minは絵文字の場合に意味が違ってしまうので、絵文字用のバリデータプラグインを用意しておきます。(これは Emoji プラグインではなく Validator プラグインであることに注意してください。詳しくは バリデータプラグインを作るを参照)

アクション定義の例

実際のアクションでは以下のように設定します。

まとめ

プラグイン自体は非常に役割は小さいので、新たに自分でプラグインを作ろうとすると、プラグインの中身よりもプラグインを使う側のほうに手間取るかもしれません。


*1あくまで例です!!