Movable Type/第15回MTプラグイン勉強会 - MT-Pluginのリファレンスを精読する http://www.ark-web.jp/sandbox/wiki/1845.html

Movable Type/第15回MTプラグイン勉強会 - MT-Pluginのリファレンスを精読する

第15回はMT::Pluginクラスのリファレンスを読みます。

MT::Pluginクラスは過去の勉強会、特に第8回第9回で扱ったregistyリファレンスで既にとりあげた箇所が多いため、リファレンスを眺めるにとどめます。
また、次回取り上げるMT::Template::Contextの前段として、条件タグの作成方法を取り上げることにしました。

MT::Plugin
MT::Builder
MT::Template::Context

[edit]

動画(Ustream)

勉強会の模様をアップしました。

モバイルカードを使って録画したためだと思いますが、録画失敗してます^^;
いずれ撮りなおします。

Ustreamのチャンネルはこちら。
http://www.ustream.tv/channel/mt%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8B%89%E5%BC%B7%E4%BC%9A

[edit]

DESCRIPTION

add_callbackメソッドに渡される$pluginは「コールバックの実行時に発生したエラーを特定する際に用います」(Movable Type オブジェクト・リファレンス - MT::Pluginより)とのこと。

 MT::Foo->add_callback("pre_save", 10, $plugin, \&callback_function);

ソースコードを見た範囲ではadd_callbackメソッド側で$pluginに対して特別な操作は行っているのは見つけられなかったため、おそらく、callback_function側でエラー発生時などに$pluginにエラー情報等をセットしておき、コールバック実行後に$pluginからそのエラー情報をとるなどを意図していると思われる(?)。

[edit]

ARGUMENTS、METHODS

Movable Type オブジェクト・リファレンス - MT::Pluginを眺めながら気になったポイントをとりあげる。

[edit]

条件タグプラグインの作り方

MT::Template::Context->add_conditional_tagを使う。

MT::Template::Context->add_conditional_tag(
   タグ名 => ハンドラへの参照,
   [オプションのコンディション]
);

そしてハンドラの方で条件判定を行い、trueなら1、falseなら0を返すように定義する。
ハンドラは

sub ハンドラ {
  my ($ctx, $args, $cond) = @_;
}

のように引数がわたってくる。
$ctxはMT::Template::Contextオブジェクト、$argsはタグの属性のハッシュの参照(例えば、<MTHOGE hoge="foo" hoge2="var">というタグの場合、

{
  hoge => 'foo',
  hoge2 => 'var',
}

が渡される。$condはトークンを解釈する条件のリストでadd_condition_tagの第2引数に
相当する。例えば、$cond=add_condition_tagの第2引数に

{ EntryIfExtended => 0 }

と指定すると

   <MTEntryIfExtended>
   <$MTEntryMore$>
   </MTEntryIfExtended>

のテンプレートを処理するさいに<$MTEntryMore$>は無視される。ただし、$condは条件タグでは利用するケースはあまりないと思われる。

以下、具体例。

例)

MT::Template::Context->add_conditional_tag(
   IsPrimaryCategory => \&_hdlr_IsPrimaryCategory
);

sub _hdlr_IsPrimaryCategory {
    my ($ctx, $args, $cond) = @_;

    my $e = $ctx->stash('entry')
        or return $ctx->_no_entry_error('IsPrimaryCategory');
    my $main_category = $e->category;

    # Get the current category context

    my $cat = $ctx->stash('category') ||
        $ctx->stash('archive_category');
    return if ($cat eq '');

    if ( $main_category->id == $cat->id ) {
       return 1;
    } else {
       return 0;
    }
}
[edit]

次回予定

MT::Template::Contextクラスのリファレンスを読みつつ、stashの扱い方について取り上げます。

投稿者進地 | パーマリンク

| append.gif

tag: Movable TypeMTMTPlugin勉強会


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-09-25 (木) 16:28:53 (5902d)

アークウェブのサービスやソリューションはこちら