&pgid();
#contents
第15回は[[MT::Plugin>http://www.movabletype.org/documentation/man/MT/Plugin.html]]クラスのリファレンスを読みます。
MT::Pluginクラスは過去の勉強会、特に[[第8回>Movable Type/第8回MTプラグイン勉強会 - registryのリファレンスを精読する(1)]]、[[第9回>Movable Type/第9回MTプラグイン勉強会 - registryのリファレンスを精読する(2)]]で扱ったregistyリファレンスで既にとりあげた箇所が多いため、リファレンスを眺めるにとどめます。
また、次回取り上げるMT::Template::Contextの前段として、条件タグの作成方法を取り上げることにしました。
[[MT::Plugin>http://www.movabletype.org/documentation/man/MT/Plugin.html]]
[[MT::Builder>http://www.movabletype.org/documentation/man/MT/Builder.html]]
[[MT::Template::Context>http://www.movabletype.org/documentation/man/MT/Template/Context.html]]
** 動画(Ustream) [#h078a3d2]
勉強会の模様をアップしました。
#htmlinsert(study/mtplugin-15.html)
モバイルカードを使って録画したためだと思いますが、録画失敗してます^^;
いずれ撮りなおします。
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 [#l3209afb]
add_callbackメソッドに渡される$pluginは「コールバックの実行時に発生したエラーを特定する際に用います」([[Movable Type オブジェクト・リファレンス - MT::Plugin>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_plugin.html]]より)とのこと。
MT::Foo->add_callback("pre_save", 10, $plugin, \&callback_function);
ソースコードを見た範囲ではadd_callbackメソッド側で$pluginに対して特別な操作は行っているのは見つけられなかったため、おそらく、callback_function側でエラー発生時などに$pluginにエラー情報等をセットしておき、コールバック実行後に$pluginからそのエラー情報をとるなどを意図していると思われる(?)。
** ARGUMENTS、METHODS [#s585850f]
[[Movable Type オブジェクト・リファレンス - MT::Plugin>http://www.sixapart.jp/movabletype/manual/object_reference/archives/mt_plugin.html]]を眺めながら気になったポイントをとりあげる。
** 条件タグプラグインの作り方 [#fba06cdf]
- [[Six Apart - 技術情報提供ブログ: テンプレート・タグ(条件タグ) プラグインの開発>http://www.sixapart.jp/pronet/developers/plugin/conditional_tag.html]]
- [[MT:プライマリカテゴリ判断を行う条件タグプラグイン]]
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;
}
}
** 次回予定 [#p808950f]
MT::Template::Contextクラスのリファレンスを読みつつ、stashの扱い方について取り上げます。
#blikifooter(進地);
tag: [[Movable Type>tag/Movable Type]]、[[MT>tag/MT]]、[[MTPlugin>tag/MTPlugin]]、[[勉強会>tag/勉強会]]