BLOG

Go to top


MT::Bootstrap を使った独自 CGI アプリケーションやテンプレート内でプラグインの L10N を使ったりプラグイン設定を取り出したりする方法

September 27, 2008 2:47 PM

ちょっと試行錯誤したので忘れないうちに。

概要

MT のプラグインを作成する時、MT::Bootstrap を使った CGI を作成することがあると思いますが、この中に日本語を書くと文字コード依存が発生してしまうので思わしくない...けど $plugin->transrate するために $plugin を取得しようとしても、プラグインを定義しているファイル拡張子は .pl なのでモジュールとして認識されず、仕方がないので require で直接読み込んだら apache に subroutine が redefine だとかいうエラーが残る、なんてことになります。

$plugin の取得

要は $plugin が取得できれば、普段プラグインの .pl ファイルに記述するような $plugin->translate( 'foo' ) とか $plugin->get_config_value( 'sample_setting' ) とかが使えるわけです。結論としては以下のような感じ。


    my $plugin = MT->component( 'hoge' );
    $plugin->translate( 'foo' );

MT->component の引数に、プラグインに設定している ID を渡すとそのプラグインがオブジェクトとして返ってくるので、そのまま使えます。get_config_value メソッドを使えばプラグイン設定も取得できます。

要は、MT がプラグインを component として把握・管理してくれるのでこのような方法が使えるわけです。ちなみに、MT のコアとなる部分は MT->component('core'); で取得でき、その内容は [MT をインストールしたディレクトリ]/lib/MT/Core.pm に記述されています(これを使うことはまずないと思いますが、参考までに)。

また、MT がプラグインを component として管理するようになったことで、テンプレート内でもプラグインで定義した L10N を使うことができるようになっています。次の項目で解説しますが、transform 系プラグインを書く場合の参考になるでしょう。

テンプレート内で、プラグインで定義した L10N を使うには

いわゆる一般的に「テンプレート」として認識されているテンプレート(「デザイン」から「テンプレート」を選択して編集するアレ)で日本語を使用する場合は問題になりませんが、管理画面テンプレートを transform するタイプのプラグインを書く場合に、MT デフォルトの L10N に適切な用語がない場合、ソースコードの中に日本語を入れる必要性に迫られる場合があります。$param{ hoge } = $plugin->translate( 'hoge' ); のようにして <mt:var name="hoge"> で取り出す方法もあるのですが、次のようにすれば簡単です。


<__trans_section component="hoge"><__trans phrase="This MT is installed hoge plugin."></__trans_section>

MT 標準の用語については <__trans phrase="hoge"> で取り出せますが、これを <__trans_section component="hoge"> と </__trans_section> で囲むことで、特定のプラグインの用語を使えるようになります。これは、上述した、%param に持たせておく方法に比べ、ソースコードを短く記述することにもつながるので、覚えておくとよいでしょう。

サンプルのダウンロード

BootstrapSample プラグイン(約 4.3 kb)

インストールと使い方

解凍してできた BootstrapSample/plugins/BootstrapSample フォルダを [MT を設置したディレクトリ]/plugins 内にそのままアップロードしてください。正しくアップロードできていれば、システム・メニューのプラグイン設定に BootstrapSample プラグインが表示されますので、「サンプルの設定」に何か設定してみてください。デフォルトでは hogehoge が入っています。

さらに、BootstrapSample/mt-bootstrapsample.cgi を、[MT を設置したディレクトリ] 直下に設置してください。mt.cgi があるディレクトリ内ということになります。さらに、設置した mt-bootstrapsample.cgi に実行権を与えてください。パーミッション 775 または 777 です。その上で、mt-bootstrapsample.cgi にブラウザでアクセスすると、「サンプルの設定は、hogehoge です。」のように、プラグイン設定で設定した内容を表示します。

また、テンプレート内でプラグインで追加した L10N を利用する方法のサンプルとして、BootstrapSample/alt-tmpl/cms/include/header.tmpl を入れています。BootstrapSample/alt-tmpl/cms をそのまま、[MT を設置したディレクトリ]/alt-tmpl ディレクトリ直下にコピーしてください(alt-tmpl は、特に何もしていなければ空の状態であるはずですが、既存のものがある場合は上書きしないよう注意してください)。これを設置すると、BootstrapSample プラグインをインストールした状態であれば、管理画面の一番上に「この MT には、BootstrapSample プラグインがインストールされています。」と表示します。インストールされていなければ、日本語訳されていない状態で表示されます。

補足

このプラグインの動作そのものは大部分の方には何の意味もありませんので、ソースコードを参照してください。BootstrapSample/plugins/BootstrapSample/lib/BootstrapSample.pm にCGI の動作が、BootstrapSample/alt-tmpl/cms/include/header.tmpl の一行目にテンプレート内においてプラグインで追加した L10N の使い方のサンプルが定義されています。もちろん、これらファイルには日本語は一切記述されていません。

また、このプラグインの使用に関する制限は設けません。(法と道徳の許す範囲でですが)自由に使ってください。

お願い

基本的にご利用は無償かつ自己責任ですが、継続的な開発、更新のため、よろしければドネーションをご検討ください。以下のボタンから、PayPal を通じて行うことができます。

また、フィードバックもぜひ kenmin.okayama@gmail.com までお送りください。コメントでもかまいません。

Comments


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.