MTCSの拡張とか。
公開日 : 2008-11-03 18:24:13
MTCSでコミュニティ系のサイトを作る時にMTCSのプロフィールの編集画面からプロフィールを保存した時に処理を割り込ませたいって時、ありますよね(え、無い?)。mt_authorを拡張して(正確にはmt_authorテーブルを拡張するとエラーになっちゃうからauthor_metaとか別のテーブルとか作ってユーザーのいろんなデータを保存したい時(且つ独自拡張した項目の必須項目チェックしたい)とか。
標題の「MTCSの拡張」に限らずこの手の拡張をする時にコードに手を入れずに該当の処理をオーバーライドする方法についてのメモ。
1.プラグイン(アドオン)のIDを調べて(この場合は「community」)
/mt/addons/Community.pack/lib/MT/App/Community.pm
#(略)
sub id { 'community' }
#(略)
2.上書きしたい部分はどこか? を探して
/mt/addons/Community.pack/config.yaml
name: Community Pack
#(中略)
applications:
cms:
methods:
#(中略)
community:
handler: MT::App::Community
methods:
#(中略) ↓ココ
save: $Community::MT::App::Community::save_profile_method
3.プラグインで上書きする
sub init {
my $community = MT->component( 'community' );
my $r =
$community->registry( 'applications', 'community', 'methods' );
$r->{save} = ¥&save_profile_method;
}
sub save_profile_method {
# ここにオーバーライドする処理を書く!
}
MT::Core(メソッドとかテンプレートタグ)を上書きする場合はcomponent('core')に対してオーバーライドする。
sub init {
my $core = MT->component('core');
my $r = $core->registry('tags', 'block');
$r->{Entries} = ¥&_hdlr_entries;
}
と、いうことで、さぁ、コミュニティサイトをつくろう(笑)!