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
- ラトルズ


