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
動画(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
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からそのエラー情報をとるなどを意図していると思われる(?)。
ARGUMENTS、METHODS †
Movable Type オブジェクト・リファレンス - MT::Pluginを眺めながら気になったポイントをとりあげる。
条件タグプラグインの作り方 †
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; } }
次回予定 †
MT::Template::Contextクラスのリファレンスを読みつつ、stashの扱い方について取り上げます。
tag: Movable Type、MT、MTPlugin、勉強会