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クラスのサブクラスです。
- 前々回
- Movable Type/第10回MTプラグイン勉強会 - MT-Appのリファレンスを精読する
- 前回
- Movable Type/第11回MTプラグイン勉強会 - MT-Appのリファレンスを精読する(2)
動画(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
METHODS †
以下、リファレンスを眺めつつ、主要なメソッドを取り上げて解説。
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はどれか一つだけ指定する。
これらのメソッドは一覧画面や検索結果画面で利用される。
do_search_replace †
検索(__mode=search_replace)で呼び出される検索ロジックの実行と結果のデータ構造を返すメソッド。
get_newsbox_content †
sixapart.comから配信されるMovable Type NewsのHTMLを返す。
Movable Type Newsのデータは取得するとキャッシュされるので、多くても日に一度の頻度でsixapart.comに取りに行くだけ。
mt-config.cgiなどでNewsboxURLの値をdisableにすると、このsiapart.comへMovable Type Newsのデータを取りにいくのをやめ、このメソッドの返り値を空にできる。
is_authorized †
リクエストしているブログに当該ユーザがアクセス権をもっているか判断する。
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'}} );
:
}
object_edit_uri †
指定されたtypeとidで特定されるオブジェクトの編集画面へのリンクを生成する。
例)ID=2のエントリーの編集画面へのリンク
my $uri = $app->object_edit_uri('entry', 2);
このメソッドは指定されたtypeの編集画面が__mode=viewで稼動することを前提としている。
MODE HANDLERS †
UTILITY FUNCTIONS †
CUSTOM REBUILD OPTIONS †
CALLBACKS †
(もしかしたらやるかも) †
次回予定 †
MT::App::CMSの続きとMT::Pluginクラスのリファレンスを読むことを予定します。
tag: Movable Type、MT、MTPlugin、勉強会
![[PukiWiki] [PukiWiki]](image/sandbox.gif)



