MT4分科会第3回勉強会の成果発表として、プラグインを書いてみたよ。
こんばんは!
いよいよ月末にて、納期が迫る案件のラストスパートをしている@cremaです。
ここのところlinker journalではすっかり「やわらか担当」になってしまっているワタクシ、今日は割と頑張ってみたいと思います。
WebSig会議MT4分科会第3回勉強会
2009年5月16日(土)に開催されたWebSig会議MT4分科会第3回勉強会ですが、私と@mersyは、藤本壱さんをリーダーとした「フィールドの拡張と管理画面のカスタマイズ」というワークショップに参加しました。
そこでは、藤本さんが丁寧かつツボを押さえた指導をしてくださり、Perl未経験者のワタクシでも、資料を拝見しながらなんとかブログ記事に新たなフィールドを追加することができた訳なのですが。。。
CategoryTextプラグイン
その後自宅に戻り、自習がてら、カテゴリに新たなフィールドを追加するプラグインを書いてみようと思い立ちました。
案件で頻繁に求められるのが、「ブログ記事リストのページにカテゴリごとの独自文章を追加したい!」というオーダーだからです。カテゴリの「説明」入力欄はmetaタグ用に使うので、別途入力欄が欲しいということなのです。
ということで、藤本さんの著書「MTOS活用テクニック―カスタムフィールドで本格的なCMS機能を実現!」をじーーーっと拝見しながら、自分なりに「CategoryText」というプラグインを書いてみました!
package MT::Plugin::CategoryText; use base 'MT::Plugin'; use strict; use MT; use MT::Plugin; use MT::Template::Context; use MT::Category; # register plugin my $plugin = __PACKAGE__->new({ name => 'CategoryText', key => 'category_text', version => '1.00', author_name => 'Akiko Kurono', description => 'Add text field to category.', schema_version => '1.00', }); MT->add_plugin($plugin); sub init_registry { my $plugin = shift; $plugin->registry({ object_types => { 'category' => { 'category_text' => 'text', }, }, tags => { function => { CategoryText => \&category_text, }, }, callbacks => { 'MT::App::CMS::template_param.edit_category' => \&add_category_text_field, }, }); } sub category_text { my ($ctx, $args) = @_; my $cat = $ctx->stash('category') || $ctx->stash('archive_category') or return $ctx->error(MT->translate( "You used an [_1] tag outside of the proper context."), '<$MT' .$ctx->stash('tag').'$)); $cat->category_text || ''; } sub add_category_text_field { my ($eh, $app, $cat, $orig_cat) = @_; my $node = $tmpl->createElement('app:setting'); $node->setAttribute('id', 'category_text'); $node->setAttribute('label', 'カテゴリー本文'); $node->setAttribute('label_class', 'left-label'); require MT::Util; my $category_text = MT::Util::encode_html($param->{category_text}); my $innerHTML = <HERE $node->innerHTML($innerHTML); my $host_node = $tmpl->getElementById('description') or return; $tmpl->insertAfter($node, $host_node); } 1;
Transformerプラグインとして、自動的に入力欄を追加できるようにしたりとか、できるんじゃないのー?などと張り切ってみましたが。。。
これが果たして動くのか?
実は、まだ怖くて試していません。。。
壊してもいいMTOS環境を準備して、試してみなければ!
というわけで、これはまだ使ったりしないでくださいね。きっと何か間違いがある気がするので。
じーっと見直したあと、動かしてみて、またご報告or配布などしたいと思います。
しかしワタクシ、Perlバージンを奪われてしまいましたよ。うふふ。
藤本さんのこの本、デザイン畑の人でも十分取り組める難易度だと思います!
MTOS活用テクニック―カスタムフィールドで本格的なCMS機能を実現!
- ASIN: 4899772386
- [単行本]
- 価格: ¥ 2,940
- ラトルズ