2005年03月13日

Movable Type プラグイン作成入門(5)

今度は独自のコンテナタグの作り方を見てみよう。

例) --- CSVで与えられたリストでループする。
package MT::Plugin::CsvLoop;
use strict;
use MT::Template::Context;
MT::Template::Context->add_container_tag(
            CsvLoop=>\&CsvLoop);
sub CsvLoop{
    my($ctx,$arg) = @_;
    my(@list)=split(/,/, $arg->{list});
    my $res = '';
    my $builder = $ctx->stash('builder');
    my $tokens = $ctx->stash('tokens');
    for my $i (@list) {
        $ctx->stash('csv_value', $i);
        defined(my $out=$builder->build($ctx,$tokens))
            or return $ctx->error($ctx->errstr);
        $res .= $out;
    }
    $res;
}

MT::Template::Context->add_tag(
            CsvLoopValue=>\&CsvLoopValue  );
sub CsvLoopValue{
    my $ctx = shift;
    $ctx->stash('csv_value');
}
package MT::Plugin::CsvLoop;
関数などの名前が衝突しないように package を指定。

MT::Template::Context->add_container_tag(
         CsvLoop=>\&CsvLoop);

MTCsvLoop というコンテナタグがあると CsvLoop という メソッドを呼びだすことを指定。

my($ctx, $arg)=@_;
呼び出されるメソッドには2つの引数が渡される。一つ目はMT::Template::Contextオブジェクト。 2つ目はパラメータのハッシュへのリファランス。

my(@list)=split(/,/, $arg->{list});
テンプレートのコンテナタグ内で list='~' と記述した場合、 $arg->{list} に ~ が入る。
これを "," で区切ったものを @list に代入。

あとは、MT::Template::Contextオブジェクトの内容をまだ理解していないので説明できない。悪しからず。(^^;)

ここで作ったプラグインを CsvLoop.pl という名で保存し、plugins ディレクトリにアップロードしておこう。 これでテンプレート内で コンテナタグの利用は以下のような感じでやれば良い。
<MTCsvLoop list='claudius,nero,galba,otho'>
   <$MTCsvLoopValue$>:
   <a href="<$MTCsvLoopValue$>.html">
     <$MTCsvLoopValue$>.html
   </a>
   <br/>
</MTCsvLoop>
テンプレートの中に固定のループを書いてもあまり役に立たないような気もするが、まあ、サンプルということで。(^^;

投稿者 augustus : 08:38 | コメント (0) | トラックバック

2005年03月07日

Movable Type プラグイン作成入門(4)

変数タグにパラメータを渡すのも易しい。

例)<$MTRepeatStr$> --- 与えられた文字列を繰り返す。
package MT::Plugin::RepeatStr;
use strict;
use MT::Template::Context;

MT::Template::Context->add_tag(RepeatStr=> \&repeat);

sub repeat {
	my($ctx, $arg)=@_;
	my $str = $arg->{str} x $arg->{kaisuu};
	$str;
}
1;

package MT::Plugin::RepeatStr;
関数などの名前が衝突しないように package を指定。

MT::Template::Context->add_tag(RepeatStr=>\&repeat);
RepeatStr というタグがあると repeat という メソッドを呼びだすことを指定。

my($ctx, $arg)=@_;
呼び出されるメソッドには2つの引数が渡される。一つ目はMT::Template::Contextオブジェクト。 2つ目はパラメータのハッシュへのリファランス。

my $str = $arg->{str} x $arg->{kaisuu};
テンプレートの変数タグ内で str='xyz' kaisuu='99' と記述した場合、 $arg->{str} に xxx, $arg->{kaisuu} に 99 が入る。
"xyz" x 99 で xyz を 99 回繰り返した文字列が得られる。

$str;
呼び出されるメソッドは最後に結果の文字列を返せば良い。

ここで作ったプラグインを RepeatStr.pl という名で保存し、plugins ディレクトリにアップロードしておこう。 これでテンプレート内で <$RepeatStr str='-' kaisuu='50' $> と記述すれば - を 50 回繰り返した文字列が得られる。

例)<$MTPerlEval$> --- perl のコードを実行する。
package MT::Plugin::Eval;
use strict;
use MT::Template::Context;

MT::Template::Context->add_tag(PerlEval=>\&perleval);

sub repeat {
	my($ctx, $arg)=@_;
	eval($arg->{eval});
}
1;
テンプレート内で <$MTPerlEval eval='12*12' $> と記述すると 144 が得られる。便利なようだが、どんな perl のコードでも実行してしまうので危険極まりないとも言える。(^^;

投稿者 augustus : 21:21 | コメント (0) | トラックバック

Movable Type プラグイン作成入門(3)

独自の変数タグを作成してテンプレートで使うことも可能だ。

例)<$MTYahooLink$> --- Yahoo へのリンクを表示する
package MT::Plugin::YahooLink;
use strict;
use MT::Template::Context;

MT::Template::Context->add_tag(YahooLink=>\&yhlink);

sub yhlink {
	my $url="http://www.yahoo.co.jp/";
	"<a href='$url'>$url</a>";
}
1;

package MT::Plugin::YahooLink;
関数などの名前が衝突しないように package を指定。

MT::Template::Context->add_tag(YahooLink=>\&yhlink);
MTYahooLink というタグがあると yhlink という メソッドを呼びだすことを指定。

"<a href='$url'>$url</a>";
呼び出されるメソッドは最後に結果の文字列を返せば良い。 とてもシンプル。

ここで作ったプラグインを yahoolink.pl という名で保存し、plugins ディレクトリにアップロードしておこう。 これでテンプレート内で <$MTYahooLink$> という変数タグが使えるようになる。

投稿者 augustus : 20:50 | コメント (0) | トラックバック

2005年03月06日

Movable Type プラグイン作成入門(2)

グローバルフィルターに引数を渡すことによってもっと柔軟な処理を行うことが可能だ。

例) ColorEzo プラグイン --- "tech-ezo" という文字列に任意の色をつける
package MT::Plugin::ColorEzo;
use strict;
use MT::Template::Context;
MT::Template::Context->add_global_filter(
            ColorEzo=>\&ClrEzo  );
sub ClrEzo {
    my($text, $arg, $ctx) = @_;
    $text=~s/(tech-ezo)/<font color='$arg'>$1<\/font>/ig;
    $text;
}
1;

前回の例とほとんど同じである。

package MT::Plugin::ColorEzo;
関数などの名前が衝突しないように package を指定。

MT::Template::Context->add_global_filter(
         ColorEzo=>\&ClrEzo );

ColorEzo というフィルタが ClrEzo というメソッドを呼びだすことを指定。

my ($text, $arg, $ctx) = @_;
フィルターに渡される3つの引数。一つ目はフィルターをかける文字列。2つ目はテンプレートから渡される引数。3つ目は MT::Template::Contextオブジェクト。
つまり、色の指定に2つ目の引数を使えば良いのだ。

$text =~ s/(tech-ezo)/<font color='$arg'>$1<\/font>/ig;
"tech-ezo" という文字列を font タグではさむ処理。色の指定に上で渡された2つ目の引数を利用している。

$text;
フィルターによって呼び出されるメソッドは、最後に結果の文字列を返す。

ここで作ったプラグインを ColorEzo.pl という名で保存し、plugins ディレクトリにアップロードしておこう。

ColorEzoフィルターを利用するには変数タグやコンテナタグのアトリビュートとして指定すればよい。

<$MTEntryTitle ColorEzo='blue'$>
記事のタイトルに対して ColorEzo フィルターを適用。 ここで指定した blue がフィルターのメソッドの2つ目の引数として渡される。

<MTEntries lastn="10" ColorEzo='#AA8800'>
...
</MTEntries>
MTEntries ループの中で ColorEzo フィルター適用。 ここで指定した #AA8800 がフィルターのメソッドの2つ目の引数として渡される。

投稿者 augustus : 17:48 | コメント (0) | トラックバック

Movable Type プラグイン作成入門(1)

Movable Type はプラグインを利用することで新たな機能を柔軟に追加することができる。
プラグインにはグローバルフィルター、変数タグ、コンテナタグ、条件タグがある。

まずはとても小さなグローバルフィルターからはじめてみよう。
例) RedEzo プラグイン ~ "tech-ezo" という文字列を赤くする
package MT::Plugin::ColorEzo;
use strict;
use MT::Template::Context;

# Global Filter RedEzo の定義
MT::Template::Context->add_global_filter(
	RedEzo => \&ChangeRedEzo);

# Filter によって起動されるメソッド
sub ChangeRedEzo {
    my($text, $arg, $ctx) = @_;
    $text=~s/(tech-ezo)/<font color='red'>$1<\/font>/ig;
    $text;
}
1;


package MT::Plugin::ColorEzo;
関数などの名前が衝突しないように package を指定。package の名前は任意だが MT::Plugin::~ という形にするのが慣習。

MT::Template::Context->add_global_filter(RedEzo=>\&ChangeRedEzo);
RedEzo というフィルタが ChangeRedEzo というメソッドを呼びだすことを指定。

my ($text, $arg, $ctx) = @_;
フィルターには3つの引数が渡される。一つ目はフィルターをかける文字列。2つ目はテンプレートから渡される引数。3つ目は MT::Template::Contextオブジェクト。

$text=~s/(tech-ezo)/<font color='red'>$1<\/font>/ig;
"tech-ezo" という文字列を font タグではさむ処理。

$text;
フィルターによって呼び出されるメソッドは、最後に結果の文字列を返す。

ここで作ったプラグインを RedEzo.pl という名で保存し、plugins ディレクトリにアップロードしておこう。

RedEzoフィルターを利用するには変数タグやコンテナタグのアトリビュートとして指定すればよい。

<$MTEntryTitle RedEzo='1'$>
記事のタイトルに対して RedEzo フィルターを適用

<MTEntries lastn="10" RedEzo='1'>
...
</MTEntries>
MTEntries ループの中で RedEzo フィルター適用

投稿者 augustus : 17:19 | コメント (0) | トラックバック

2004年01月16日

MovableType を MySQL で使う。

私がサーバを借りているIpowerWEBでは MySQL を使うことが出来る。せっかくなので、MovableType のデータを MySQL を使って保存するように設定し直してみた。手順は概ね以下の通り。


  • IpowerWEB のコントロールパネルから MySQL の DB と ユーザを作成する。
  • mt.cfg を編集する。
    DataSource ./db
    の行をコメントアウトして、替わりに
    ObjectDriver DBI::mysql
    Database DBの名前
    DBUser DBに接続するユーザ名

    という行を付け加える。
  • mt-db-pass.cgi に DBに接続するためのパスワードを記入する。
  • mt-load.cgi を走らせる。
  • 前のデータはインポートすることにより復活。

参考になったサイトは
http://209.204.217.175/readme/mtcfg.html

投稿者 augustus : 23:37 | コメント (0) | トラックバック

2004年01月15日

MOVABLE TYPE インストール

昨日からの大雪と強風のため外出する気分にならなかったので、ネット上をぶらぶらしているうちに BLOG の紹介ページにたどり着く。面白そうだったので MOVABLETYPE とその日本語化キットをダウンロードして、借りているサーバにインストールしてみる。
私が借りている IpowerWeb のサーバには必要なものは全部入っていたようですんなりインストール出来た。

インストールには以下のサイトを参考にした。
MovableType 日本語化手順

投稿者 augustus : 22:14 | コメント (1) | トラックバック

Movable type のマニュアル

ありがたいことに日本語訳があった。

投稿者 augustus : 14:47 | コメント (0) | トラックバック