JavaScript、Ajax、HTML5(API)、Ruby…Web及び関連技術の実験&情報公開&制作物紹介。

ダイナミック・パブリッシング対応 indexcontext プラグイン

| トラックバック(1)

すっかりおなじみになった「MTプラグイン PHPizeプロジェクト」第6弾!

今回勝手にPHP対応化させていただいたのは、idxctxプラグイン
またまた小粋空間さんで紹介されていて初めて知ったのですが、これは便利だ、しかしダイナミック・パブリッシング未対応! ということで早速私の手で! ということなのです。

2007/05/29 ライセンスについて追記あり】

ダウンロード

(どちらかを選択してください。内容は同じです。)

インストール

  1. ダウンロードしたファイルを解凍してください。
    ただ一つのPHPファイル block.MTIndexContext.php が生成されます。
  2. 解凍して得られたファイルを、[MT]/php/plugins/ フォルダ内にコピー(アップロード)してください。

使い方

オリジナルのサイト、もしくは小粋空間さんによる紹介ページを参照してください。

ここでは簡単に、オリジナルサイトの紹介文を引用しておきたいと思います。

例えばエントリーアーカイブで、ブログ全体の最新コメントをサイドバーに表示させたい場合。
MTの仕様では難しい(出来ない?)んですよね。
該当のエントリーのコメントだけがMTCommentsの対象になるので。

例えば月別アーカイブで、ブログ全体の最新エントリーをサイドバーに表示させたい場合。
出来ないんですよね。該当の月のエントリーだけがMTEntriesの対象になるので。

そこで、MTIndexContext というコンテナ・タグを追加するプラグインを作りました。

《中略》

このコンテナ・タグで囲んだ箇所は、一時的にインデックステンプレートと同じ振る舞いになります。

技術情報

ここでは、Movable Type(以下、MT)において、「コンテキスト(テンプレート・コンテキスト)」という概念がどういうものか、ということが大体分かっている方を対象に解説します。
「何それ?」「よく分かんない?」という方は、私の説明記事を参照していただければ幸いです(→「テンプレート・コンテキスト」とは)。
もちろん、難しい話になりますので、興味のない方は読み飛ばしてくださってもいっこうに構いません。

このプラグイン、Perl版のソースは非常に「コロンブスの卵」的にシンプルになっています。
今がどんなコンテキストの状態かにかかわらず、無理矢理新しいまっさらなコンテキストを与えて、そいつに全てを処理させる、という方式を採っているのです。
結果として、インデックス・テンプレートの(一番外側の)コンテキストに沿ってテンプレート(コンテンツ)が処理されるのと同じ結果が得られる、というわけです。

PHP版(ダイナミック・パブリッシング)では、この方法をストレートに使うことはできません。
これは簡単に言うと、スタティックページを再構築するときとダイナミック・パブリッシングでページを動的生成するときとで、コンテナタグの振る舞いに以下のような違いがあるからです:

スタティックの場合
  • 内容(コンテンツ)は、コンテナタグの処理の中で解析・処理される。
  • コンテナタグの処理ルーチンは、一度だけ呼ばれ、内部自己完結する。
ダイナミックの場合
  • 内容(コンテンツ)は、あらかじめ解析・処理されたものがコンテナタグの処理へと引き渡される。
    (ただし最初に処理が始まる前に「初期処理」を施すことは可能)
  • コンテナタグの処理ルーチンは、初期処理で一度、本処理でループの回数分だけ呼ばれる。処理のコントロールは「コンテキスト」そのものが握っている。

つまり、処理方法をコンテナタグ自身が決められる自由度が、ダイナミックの方はスタティックより低いのです。しかもテンプレートのすべての処理を、その実権は「コンテキスト」に握られてしまっているのです。
唯一、「初期処理」でうまく調整してやるしか方法はないのです。

そこで、今回のPHP化でも、「初期処理」でなんとかする方法を採っています。

ただ、やっていることは非常に単純です。
インデックス・テンプレートにはなくて、アーカイブ・テンプレートには存在する可能性のある「内部状態」を、初期処理ですべてバックアップした後初期化してしまっています。
そしてコンテンツの処理が終わった後に、それらをリストアしている、というわけです。

興味のある方は、PHPファイル block.MTIndexContext.php の中身を覗いてみてください。
PHP版(ダイナミック・パブリッシング対応)コンテナタグの、ごくごく基本的なソースになっています。

互換性について

現在公開されているidxctxプラグインと互換性があります。
代表的な事例(エントリーアーカイブでブログ全体の最新コメントを表示、月別アーカイブでブログ全体の最新エントリーを表示、等)で、現行のPerl版 idxctxプラグイン と同じ挙動になることを確認しております。

著作権・ライセンスについて

ただいま調査中です。
ソースそのものは、オリジナルの動作を完全にシミュレートする形で一から書き起こしていますので、著作権の侵害には当たらないと思われますが、ライセンスに関しては詳細が判明次第、ここに追記いたします。

追記:2007/05/29】
PHP版indexcontextプラグインの著作権は、原作者であるsawada氏、およびPHP版制作者である あんちもん2 が主張させていただきます。
(block.MTIndexContext.php: Copyright (c) 2007 sawada, Antimon2)
なお、オリジナルのPerl版indexcontextプラグインについては、原作者のsawada氏に著作権があります。

またこのプラグインは、MITライセンス日本語参考訳)に順ずるものとします。
簡単に言えば、『使用制限なし、再配布や改造など問題なし、ただし無保証』ということです。

なお、こちらで公開しているPHPソースおよびそれを使用したことによる問題点や気づいた点に関して、原作者に直接問い合わせをしないでください。
この記事へのコメント、もしくはトラックバック等でお願いいたします。

トラックバック(1)

metabolism - 月別アーカイブにも月別アーカイブ一覧を表示(ややこしい):indexcontext.pl (2007年12月16日 21:41)

今日はMTづいてますw  久し振りに小粋空間さんを彷徨ってたら、ずっと欲しかっ... 続きを読む

カテゴリ

月別 アーカイブ

OpenID対応しています OpenIDについて

このブログ記事について

このページは、あんちもん2が2007年3月21日 17:21に書いたブログ記事です。

ひとつ前のブログ記事は「ダイナミック・パブリッシング対応 ArchiveDateFooter プラグイン」です。

次のブログ記事は「onkeypress、乱用禁止!」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。