linkerは「人と人」「人と情報」「人と物」をつなぐデザインユニットです。

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機能を実現!

MTOS活用テクニック―カスタムフィールドで本格的なCMS機能を実現!

  • ASIN: 4899772386
  • [単行本]
  • 価格: ¥ 2,940
  • ラトルズ

Amazon.co.jp で詳細を見る