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

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

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

MT::App::CMS

MT::App::CMSは前回前々回でリファレンスを読んだMT::Appクラスのサブクラスです。

前々回
Movable Type/第10回MTプラグイン勉強会 - MT-Appのリファレンスを精読する
前回
Movable Type/第11回MTプラグイン勉強会 - MT-Appのリファレンスを精読する(2)
[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]

METHODS

以下、リファレンスを眺めつつ、主要なメソッドを取り上げて解説。

[edit]

build_<type>_table

以下のメソッドは同じインタフェースを持つ。

$app->build_author_table(%args)
$app->build_blog_table(%args)
$app->build_comment_table(%args)
$app->build_commenter_table(%args)
$app->build_entry_table(%args)
$app->build_group_table(%args)
$app->build_junk_table(%args)
$app->build_log_table(%args)
$app->build_ping_table(%args)
$app->build_tag_table(%args)
$app->build_template_table(%args)

$app->build_<type>_tableメソッドはtmpl/cms/include/<type>_table.tmplテンプレートに引き渡すデータ構造を構築して返します。

%argsで指定できる引数は以下の通りです。

param
テンプレートエンジンに引き渡すkey=>valueのペアからなるハッシュリファレンス。
param => {
   hoge => 'ほげです',
}
とすれば、テンプレート内の「<$mt:var name="hoge"$>」が「ほげです」になる。
load_args
<type>に紐付けられたClass(例えば、<type>がentryならMT::Entry)のloadメソッドに引き渡す引数。Class->loadメソッドは条件に合致するモデルオブジェクトの配列リファレンスを返す。loadメソッドの詳細はMT::Objectのloadメソッドを参照のこと。例えば、blog_idが1でエントリー作成日の降順でloadするような指定は以下のようになる。
load_args => {
  { blog_id => 1 },
  { sort => 'created_on',
    direction => 'descend', },
}
iter
<type>に紐付けられたClassのオブジェクトをロードできるイテレータ。Class->load_iterで作成したイテレータを指定する
items
<type>に紐付けられたClassのオブジェクトの配列リファレンス

load_args、iter、itemsはどれか一つだけ指定する。

これらのメソッドは一覧画面や検索結果画面で利用される。

[edit]

do_search_replace

検索(__mode=search_replace)で呼び出される検索ロジックの実行と結果のデータ構造を返すメソッド。

[edit]

get_newsbox_content

sixapart.comから配信されるMovable Type NewsのHTMLを返す。
Movable Type Newsのデータは取得するとキャッシュされるので、多くても日に一度の頻度でsixapart.comに取りに行くだけ。
mt-config.cgiなどでNewsboxURLの値をdisableにすると、このsiapart.comへMovable Type Newsのデータを取りにいくのをやめ、このメソッドの返り値を空にできる。

[edit]

is_authorized

リクエストしているブログに当該ユーザがアクセス権をもっているか判断する。

[edit]

listing

一般的な一覧表示に使えるメソッド。

引数はハッシュの参照。ハッシュに指定できる値は以下の通り。

Type
処理対象のtypeを指定する。MT::App::CMSが標準で用意しているtypeはblog, entry, author, comment, ping, template, notification, templatemap, commenter, banlist, category, ping_cat, log, tag, group, role, association。メソッドの内部ではtypeの値を使って$app->model('Typeの値');で一覧対象のクラスをロードする。一覧対象のクラスはMT::Objectを継承している必要がある。
Template
テンプレートファイル名。未指定の場合はlist_<type>.tmplの命名規則でテンプレートファイル名が特定される。NoHTMLパラメータが指定されるとこのパラメータは使用されない。
Params
テンプレートエンジンに渡すパラメータ
Code
一覧対象のクラスのオブジェクト一件一件の処理の度に呼び出される関数のリファレンス。テンプレートエンジンに処理が渡る前にオブジェクト単位にオブジェクトの状態やパラメータカスタマイズしたい場合に利用する。
Terms
一覧対象クラスのload_iterメソッドに引き渡す\%termsパラメータ。表示対象オブジェクトのフィルタリングに利用する。詳細はMT::Objectのload、load_iterを参照のこと
Args
一覧対象クラスのload_iterメソッドに引き渡す\%argumentsパラメータ。表示対象オブジェクトのソートやjoinに利用する。詳細はMT::Objectのload、load_iterを参照のこと
Iterator
イテレータのメソッド名。未指定時はload_iterが自動でセットされる。例えば、Typeがauthorの場合、MT::Author->load_iterがイテレータとして使用される。しかし、MT::Authorは当該Authorのrole(ロール)をイテレートするrole_iterなどの便利なイテレータが用意されている。これらを使いたい場合はこのパラメータを利用してイテレータメソッド名を指定する。
NoHTML
テンプレートエンジンに引き渡さず、引き渡すデータ構造(ハッシュリファレンス)を返すようにするためには、このパラメータに1(またはtrue判定される値)を指定する。

また、以下のqueryパラメータをlistingメソッドは認識する。

offset
一覧表示のオフセット値。指定した数値分のオブジェクトを一覧表示からスキップする
search
管理画面(CMS)での検索キーワード。現在、typeがcurrently, blog, author, entry, comment, template, pingの検索をサポートしている。
filter, filter_val
特定の値でフィルタリングを指定する。filterとfilter_valに指定した値でTermsにfilter=filter_valの条件を追加することになる。

例)現在のログインユーザのエントリーの一覧を得る

   return $app->listing({
       Type => 'entry',
       Terms => {
           author_id => $app->user->id,
       },
   });

A-Formでもフォームの一覧などでlistingメソッドを利用している。

   my $html = $app->listing({
       Type => 'aform',
       Terms => {
       },
       Args => { sort => 'id' },
       Code => \&_form_item_for_display,
       Params => {
         saved_deleted => ( $app->param('saved_deleted') || '' ),
         can_create_aform => $is_aform_superuser,
         can_delete_aform => $is_aform_superuser,
         can_publish_aform => $is_aform_superuser,
         aform_manual_url => plugin()->manual_link,
       },
   });

   # リスト表示対象のMT::AFormオブジェクト一件一件に対して作用させる関数
   # statusカラムの値からUnpublishedなどの表示用の文言への変換を行ったりしている。
   sub _form_item_for_display {
       my $app = shift;
       my $item_hash = shift;
   
       $item_hash->{'disp_id'} = sprintf("%03d", $item_hash->{'id'});
   
       $item_hash->{'title'} = MT::I18N::encode_text($item_hash->{'title'}, 'utf8');
   
       $item_hash->{'publish_term'} = sprintf("%s - %s", $item_hash->{'start_at'}, $item_hash->{'end_at'});
   
       my %status = (
           '0' => 'Unpublished',
           '1' => 'Waiting',
           '2' => 'Published',
           '3' => 'Closed' );
   
       $item_hash->{'status'} = $item_hash->{'status'} ? $item_hash->{'status'} : 0;
       $item_hash->{'status_label'} = plugin()->translate($status{$item_hash->{'status'}} );
   
      :
   }
[edit]

object_edit_uri

指定されたtypeとidで特定されるオブジェクトの編集画面へのリンクを生成する。

例)ID=2のエントリーの編集画面へのリンク

 my $uri = $app->object_edit_uri('entry', 2);

このメソッドは指定されたtypeの編集画面が__mode=viewで稼動することを前提としている。

[edit]

MODE HANDLERS

[edit]

UTILITY FUNCTIONS

[edit]

CUSTOM REBUILD OPTIONS

[edit]

CALLBACKS

[edit]

(もしかしたらやるかも)

MT4.xプラグイン作成/プラグイン管理画面の作成

[edit]

次回予定

MT::App::CMSの続きとMT::Pluginクラスのリファレンスを読むことを予定します。

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

| append.gif

tag: Movable TypeMTMTPlugin勉強会


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

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