&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/勉強会]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

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