MovableTypeプラグインの作り方 〜 第1回:はじめに

Posted by
ぴろり
Posted at
2006/03/28 23:24
Trackbacks
関連記事 (1)
Comments
コメント (1)
Post Comment
コメントできます
Category
MovableType カテゴリ
 過去に々とを作ってきた経験から、 その知識を記事として整理しておくのは良いことかも知れません。 独学+トライ&エラーで得られたモノばかりで、かなりアレゲ(?)な内容ですが、 これからを作ってみよう!という方の一助になれば幸いです。
 できるだけサンプルコードを多用して説明するよう心がけていますが、 筆者がひっじょーに説明下手な上に、勘違いをそのままに暴走する人なので、 チンプンカンプンだったらゴメンなさい orz
この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

目次

 一度では全て書き切れないので、幾つかの連載記事とする予定です。 MovableType のヘルプドキュメント にある内容を網羅し、これに沿った形で書いていくつもりですので、併せて読み進めていただけるとモア・ベターかと思います。 よろしくお付き合いくださいませm(_ _)m

の雛型

 ほとんどのMT::Plugin クラスを利用して作ります。 MT 本体との間にある小難しい取り決めは MT::Plugin クラスが賄ってくれるので、 開発者はの実装に専念することができます。
 以下の内容で myplugin_1_1.pl というファイルを作り、 MT の plugins フォルダにコピーするだけです。 MT の管理画面から[]と辿ることで、作ったを確認することができます。
 ちなみに今の段階では、このは一覧に表示されているだけで、実際には何の機能も持っていません。

コードの詳細

package MT::plugin::myplugin_1_1;
以下に続くプログラムコードが、他の様々なプログラムコードと衝突しないよう、 名前空間を定義します。 …上手い説明ぷりーず。
use base qw( MT::Plugin );
これから MT::Plugin クラスを 継承 したサブクラスを作ることの宣言です。 このの中で口出しする部分(独自の機能定義)はあるけれど、 それ以外の何も言わないところは、MT::Plugin 側で何とかしてね♪と言うこと。
$plugin = new MT::Plugin
MT の入れ物を作ります。 この段階では、入れ物しか無いので、その名前も、何をするためのかさえも定義されていない状態です。 以下に続く。
name
このの名前を定義します。 下の図の"My First Plugin"と書かれた部分で、あなたのセンスが問われる大事な部分です(大きなお世話)
version (3.2以降)
こののバージョン番号を定義します。 下の図では"1.00"と書かれた部分(前の"バージョン"は含まれない)で、 機能追加やバグ修正を行った場合は忘れずに変更しておくと、後々、幸せになれます。
doc_link
こののドキュメントへの URLを定義します。 相対パスと絶対パスの何れかを指定できます。 相対パス指定の場合は、myplugin_1_1.pl のあるディレクトリが基準になります。
author_name (3.2以降)
このの作者の名前を定義します。 下の図で"Piroli YUKARINOMIYA"と書かれた部分で、あなたの名前か、所属する組織名が入るでしょう。
author_link (3.2以降)
上の author_name URL を定義します。 個人や組織のウェブサイトに誘導するのに役立ちます。
plugin_link (3.2以降)
こののホームへの URL を定義します。 専用のウェブページがある場合、そこへ誘導するのに役立ちます。
description
下の図では"description"部分のように、このの簡単な説明文を記述できます。 ここでは概要説明程度に留め、doc_linkplugin_link を利用して 詳細な解説ページに誘導するのが好ましいかと思います。
MT->add_plugin ($plugin);
上で定義した内容のを、MT のとして追加するための処理です。 実は無くても動く場合があります。 が、一覧に表示されなくなるので、ちょっぴり損した気分です。
1;
のおまじないです(笑 の最終行に忘れずに書いておきます。 プログラムの他の部分が全て正しくても、この 1 行がないと動作しません。
プラグイン一覧での見た目

変数タグの基礎

 変数タグは <MTDate><MTBlogName> のように、 そのタグが何らかの値や文字列に置き換えられるものです。 <MTCalendarDay> などのように、 特定のコンテナタグ内部でしか使われない変数タグがありますが、 これは次回以降、コンテナタグの説明の回に任せます。

 ここでは簡単な例として、再構築の度に 1 から 6 の任意の整数に置き換えられて、 サイコロの様に振舞う変数タグ<MTDice>を作ってみます。
 先ほどと同様に、以下の内容で myplugin_1_2.pl というファイルを作り、 MT の plugins フォルダにコピーしてください。

 そして、適当な中に <$MTDice$> タグを追加し、そのを再構築してみます。 再構築されたファイルをで開くと、タグを埋め込んだ場所に、1 から 6 の任意の整数が表示されるはずです。

コードの詳細

 新しく追加された部分について説明をします。それ以外の部分は前章と同じです。
use MT::Template::Context;
 のコンテクストに関するクラスを使用することを宣言します。 ぶっちゃけ、おまじないです(ぉぃ
MT::Template::Context->add_tag (Dice => sub { int (rand 6) + 1 });
 のコンテクストに新しい変数タグを追加します。 変数タグの名前は「MTDice」で、 その処理内容は「0 以上 6 未満の乱数(rand 6)の整数部分(int)に 1 を足す」と云うことです。
 これは 1 から 6 の整数を返すだけの簡単な処理でしたが、もっと複雑な処理を行う場合など、 これではプログラムがぐちゃぐちゃになってしまうことがあります。 そこで以下のように、処理部分を別に サブルーチン として定義しておき、これを用いるよう指定することができます(myplugin_1_2a.pl)。 将来の機能拡張を考えて、最初からこの様式で書いておくと便利です。

変数タグの引数

 <MTDice>タグはサイコロを一つだけ振ることができましたが、 サイコロを二つ三つ…と振れるように改造してみましょう。サイコロの数は

のように指定できるようにします。それが以下のプログラムコードです(myplugin_1_3.pl)。

 そして先ほどの中の <MTDice> タグに num="3"を追記して、そのを再構築してみます。 再構築されたファイルをで開くと、タグを埋め込んだ場所に、"5-3-6"などの数字がランダムに表示されるはずです。

コードの詳細

 新しく追加された部分について説明をします。それ以外の部分は前章と同じです。
my ($ctx, $args) = @_;
 現在のコンテクストと引数のハッシュ参照を取得します。これもぶっちゃけ、おまじないで。
my $num = $args->{num} || 1;
変数タグに与えられた引数にアクセスするには、この $args を使用します【←ここ重要】  この例では変数タグの num="..." で指定された値を取得して $num に代入します。 num が指定されていなかった時は 1 が代入されます。
my @eye = ();
サイコロの出目を記憶するための空の配列を用意しています。
while ($num--) { push @eye, int (rand 6) + 1; }
$num 回だけサイコロを振り、その出目を @eye に覚えておきます。
join '-', @eye;
@eye に覚えておいたサイコロの出目をハイフン(-)で区切って返します。

データを扱う変数タグ

 ここまで変数タグの説明として、とは関係のない動作を行うものばかりでしたが、 エントリやなど、の様々なデータを扱うことも勿論可能です(むしろこちらが本命)。 のデータは、$ctx という変数に格納されているので、 これを使用してデータにアクセスすることになります。
 例えば、MT の標準タグである <$MTBlogName$> と同じ動作をする <$MTMyBlogName$>変数タグのプログラムは次のようになります。

コードの詳細

 新しく追加された部分について説明をします。それ以外の部分は前章と同じです。
my $blog = $ctx->stash('blog');
 現在のコンテクストが含まれるへの参照を取得します。 stash は、おまじないで(これ多いな)
$blog->name;
現在のの名前を取得します。

 $ctx から、どのようなデータにアクセスできるのか、その一覧を見るには、 こので定義された<MTListContext>変数タグを使ってみてください。 $ctx の中身をずらずらっとダンプしてくれるので(dump_context.txt)、 どのようなデータが含まれているか調べることができます。
 これを見ると、の設定やエントリの投稿日など、殆んど全てのを扱うことができるとわかるでしょう。 これらのデータを如何に扱うか、そこは貴方の考え次第です。

サンプルファイルの

 この記事で使用したのプログラムコードを ダウンロードできます。

この記事を読んだ人はこんな記事も読んでいます 記事リコメンデーションについて

その他の関連する記事


関連記事/トラックバック (全 1 件中、最新 5 件まで表示しています)

web by okworld のスクリーンショット
タイトル
Movable Type3.3のプラグインを作る
Trackbacked at
2006/07/23 03:13
from
web by okworld
評価
Web Scouter
概要
別管理のブログの改造について(Movable Type3.3)・・ カテゴリページの上段部分にそれぞれ違ったコンテンツを掲載したいなーと思って色々なサイトを探し...

この記事にトラックバックを送るには?

寄せられたコメント (全 1 件中、最新 5 件まで表示しています)

Posted by
bzbell
at
2006/05/08 11:35
ID
H9EvngGU

こんにちわ^^

わたしもプラグインを作ってみたいと思って徘徊していたらこちらに行き着きました。
とっても分かりやすい説明です。

変数タグをトップページとエントリページで表示させてみたところ、内容が異なるんですね。
MT のタグによっては、コンテナタグを使用しないとエラーする意味が分かりました!!

第2回〜も読ませていただきます。

コメントを投稿する

 
 (匿名可/必須/公開)
 (匿名可/必須/非公開)
 (必須)
コメントスパム防止のため投稿前に ランダムな数字 CAPTCHAについて を入力してから投稿してください。お手数ですがご協力のほど宜しくお願いいたします。