ダイナミック・パブリッシング対応 indexcontext プラグイン
Category : MTplugin
すっかりおなじみになった「MTプラグイン PHPizeプロジェクト」第6弾!
今回勝手にPHP対応化させていただいたのは、idxctxプラグイン。
またまた小粋空間さんで紹介されていて初めて知ったのですが、これは便利だ、しかしダイナミック・パブリッシング未対応! ということで早速私の手で! ということなのです。
【※2007/05/29 ライセンスについて追記あり】
ダウンロード
(どちらかを選択してください。内容は同じです。)
- indexcontext_php.zip[527 Bytes]
- indexcontext_php.tar.gz[342 Bytes]
インストール
- ダウンロードしたファイルを解凍してください。
ただ一つのPHPファイル block.MTIndexContext.php が生成されます。 - 解凍して得られたファイルを、[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ソースおよびそれを使用したことによる問題点や気づいた点に関して、原作者に直接問い合わせをしないでください。
この記事へのコメント、もしくはトラックバック等でお願いいたします。





コメントする