2xup.org

Transformer 機能を利用したプラグインで管理画面をカスタマイズ

imagealt プラグインの知らせのあと、Transformer を使えるように勉強していたところ、ちょうど『カテゴリーの出力先を指定できるようになったのは良いのだけれど、そのフィールドのラベルが出力ファイル名なのはねえ。』という意見があったので、それ plu ということで練習を兼ねて作ってみました。実は管理画面のテンプレートを書き換えて lib/MT/L10N/ja.pm に文言を追加すれば済むのだけれど、そういう変更はなんかチョット元のファイルを弄ってしまうのでアレですし…。そもそも Movable Type のコード自体をカスタマイズしてしまっているばかりにアップグレードが大変に感じてしまうのも嫌なので。あわせて 3.3 からプラグインごとにローカライゼーションできるので、MT::Plugin::L10N を利用してみました。これで言語環境によってプラグインの説明の言語も変わります。ステキング!

ダウンロードしたら Transformer ディレクトリをそのまま [mt]/plugins/ にアップロードします。インストールはこれだけでオケイです。カテゴリーごとの管理画面に移動し、『出力ファイル名』となっている所が『出力ディレクトリ名』になっていると思います。ちなみに使用言語を英語にすると、『Category Path』になります。

プラグイン導入前
Transformer Sample プラグイン導入前のカテゴリー管理ページキャプチャカテゴリーの出力先ディレクトリを入力するフィールドのラベルは出力ファイル名となっています。
プラグイン導入後
Transformer Sample プラグイン導入後ラベルの変更されたカテゴリー管理ページキャプチャカテゴリーの出力先ディレクトリを入力するフィールドのラベルは Transformer Sample プラグインで出力ディレクトリ名 (使用言語が英語の場合は Category Path) に変更されました。

合わせてシステムメニューのプラグインページにリストされている項目を言語環境 (en_us と ja) でチェックしてみてください。言語によって表示が異なるはずです。わかりやすいように全て日本語化できるように ja.pm で定義しています。

使用言語が日本語の場合
使用言語が日本語の場合のプラグインリストページの表示キャプチャ
使用言語が英語の場合
使用言語が英語の場合のプラグインリストページの表示キャプチャ

プラグインの内容と解説

単なるサンプルですので、管理画面をちょこっと変更したい場合には、このプラグインに登録項目とサブルーチン追加すると良いかもしれません。プラグインファイルのソースは勉強中でもあるので晒しておきます。各部日本語化する必要が無い場合は、ファイルをダウンロードしなくても、以下のコードをTransformerSample.plといったファイル名で保存し、[MT]/plugins/ にアップロードすれば機能します。

package MT::Plugin::TransformerSample;

use strict;
use MT::Plugin;
@MT::Plugin::TransformerSample::ISA = qw(MT::Plugin);

use MT;
my $plugin = new MT::Plugin::TransformerSample({
    name => '<MT_TRANS phrase="Transformer Sample">',
    version => 'test',
    description => '<MT_TRANS phrase="Transformer Test.">',
    author_name => '<MT_TRANS phrase="Taichi Kaminogoya">',
    author_link => 'http://2xup.org/',
    l10n_class => 'TransformerSample::L10N',
});

MT->add_plugin($plugin);
MT->add_callback('MT::App::CMS::AppTemplateSource.edit_category', 9, $plugin, \&edit_category_basename_label);

sub edit_category_basename_label {
    my ($eh, $app, $tmpl) = @_;
    my $catpath = $plugin->translate('Category Path');
    $$tmpl =~ s!(<label for="basename"><MT_TRANS phrase="Basename"></label>)!<label for="basename">$catpath</label>\n!is;
}

1;

テンプレートソースを変更する場合は、以下の様に登録項目を設定します。edit_category となっている所は .tmpl という拡張子を除いた 管理画面テンプレート名です。またそのあとの edit_category_basenamelabel の部分は後で書くサブルーチンの名前を入力します。

MT->add_callback('MT::App::CMS::AppTemplateSource.edit_category', 9, $plugin, \&edit_category_basenamelabel);

あとはサブルーチンで変更したい場所、変更後のソースを定義しています。

$$tmpl =~ s!(変更したうい部分を探すためのソース (変更前のソース))!変更後のソース!is;

もし、<span class="memo">memo</span><span class="memo">memo</span><span class="note">note</span> としたい場合は

$$tmpl =~ s!(<span class="memo">memo</span>)!$1<span class="memo">memo</span><span class="note">note</span>!is;

という風に変更後のソースの前に変更前のソースを返す$1を書きます。元のソースの簡単な追加や置換はこれだけでできます。

Transformer 機能を利用し Movable Type の管理画面をカスタマイズできるという事は、たとえばシステムとしてクライアントに提供する際にクライアントに合わせたカスタマイズで提供が可能になりますね。ただ管理画面の項目を追加するだけでなく、Right Fields プラグインや imagealt プラグインのように、機能自体の追加も可能なので、Movable Type を利用した CMS としての可能性は Transformer 機能でさらに広がりそうです。

4 Comments

後大おおおおhhhhhhhhhhhhhhhhhhh2006年8月10日 21:19

ファイルダウンロードしようと思ったのですが、ファイルありませーん、っていわれちゃいましたので、かなピーです。

kaminogoya2006年8月14日 12:28

> 後大おおおおhhhhhhhhhhhhhhhhhhhさん
ファイルのリンクが間違えておりました。
修正しましたので、まだ間に合うようでしたらダウンロードしてみてくださいませ。

ちゃまる2006年9月25日 18:21

同じくファイルありませーん。
(T^T)
ダウンロード先教えてくださーい。

kaminogoya2006年9月25日 18:49

> ちゃまるさん
申し訳ございません、もう一度お試しになっていただけますか?
どうぞよろしくお願いします。