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

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

| トラックバック(1)

私自身は、このブログではダイナミック・パブリッシングを導入していません。
ただそのニーズはあると思ったので、MTのオリジナル・プラグインを公開するときはできる限りダイナミック・パブリッシング対応になるようにしています。
先日の「SbCodeプラグイン」もそうですし、以前に公開した「AutoIncrementalVarプラグイン」も、実際にダイナミック・パブリッシング環境で使っていただけているようで、作者としてはうれしい限りです(^-^)

そこで、個人的に新しいプロジェクトを発足!
既存のプラグインを勝手にPHP対応にする、その名も「MTプラグイン PHPizeプロジェクト」!
実は過去に、CompareプラグインをPHP化しているので、今回は第2弾! ということになります。
今回提供するのは、「MTTagInvokeプラグイン」!

動作環境

Movable Type(以下、MTと略記)ver.3.x、ver.4 以降。
(MT4用、MT3用を別アーカイブで用意しています。)

2007/08/19 MT4に正式対応】

ダウンロード

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

MT4用
MT3用

インストール

MT4の場合
  1. ダウンロードしたファイルを解凍してください。
    解凍ソフトに「ディレクトリ構造を**」というオプションがある場合は、「ディレクトリ構造を有効(再現、等)」にして解凍すると、以下のようなディレクトリ構造が生成されます:
    [MTTagInvoke_php]
      ┗[php]
        ┗(5個のPHPファイル)
  2. 解凍して得られた MTTagInvoke_php フォルダをまるごと、[MT]/plugins/ フォルダ内にコピー(アップロード)してください。
MT3の場合
  1. ダウンロードしたファイルを解凍してください。
    解凍ソフトに「ディレクトリ構造を**」というオプションがある場合は、「ディレクトリ構造を有効(再現、等)」にして解凍すると、以下のようなディレクトリ構造が生成されます:
    [php]
      ┗[plugins]
        ┗(5個のPHPファイル)
  2. 解凍して得られた(php/plugins/ 以下の)5個のPHPファイルを全て、[MT]/php/plugins/ フォルダ内にコピー(アップロード)してください。

使い方

小粋空間さんが「個別エントリーアーカイブに同一カテゴリーのエントリーを表示」という記事で、MTTagInvokeの具体例を示してくださっています。
ぜひ参考にしてみてください。
またもちろん、オリジナルのサイト(英語)も参照してください。

互換性について

一般的な使い方をする分には、通常のMTTagInvoke(v1.0)の使い方で問題はありません。
ただ1点、もとい2点、注意点があります。

  • コンテナタグを処理しようとする場合、<MTTagInvokeContent>?</MTTagInvokeContent>ブロックを省略しないでください。
  • コンテナタグを処理しようとする場合、<MTTagInvokeContent>?</MTTagInvokeContent>は最後に記述してください。
>>>詳細を表示する <<<詳細を隠す

コンテナタグというのは、<MTEntries> とか <MTSetVarBlock> のように、開始タグと終了タグがありその間の記述(コンテンツ)を処理するテンプレートタグのことです。
なので普通は<MTTagInvokeContent>?</MTTagInvokeContent>ブロックを省略することなんてないと思いますが、オリジナルの(Perl版の)MTTagInvokeでは、MTTagInvokeContentブロックを省略しても正常に動作します。(コンテンツが空っぽという前提で処理されます。)しかし拙作のPHP版では、MTTagInvokeContentブロックが省略された場合はそのコンテナタグは処理されません。
例えば、以下のような記述を考えます。

<$MTSetVar name="a" value="これが表示されたらNG!"$>
<MTTagInvoke>
<MTTagInvokeName>MTSetVarBlock</MTTagInvokeName>
<MTTagInvokeAttribute name="name">a</MTTagInvokeAttribute>
</MTTagInvoke>
&quot;<MTGetVar name="a">&quot;

これをスタティックなHTMLとして再構築した場合、表示は「""」と表示されます(変数aに「」(空の文字列)が代入されるため)。
しかしダイナミック・パブリッシングでは、「"これが表示されたらNG!"」と表示されてしまいます。
どちらでも正常に動作させるのは、明示的に空の <MTTagInvokeContent></MTTagInvokeContent> を入れる必要があります:

<$MTSetVar name="a" value="これが表示されたらNG!"$>
<MTTagInvoke>
<MTTagInvokeName>MTSetVarBlock</MTTagInvokeName>
<MTTagInvokeAttribute name="name">a</MTTagInvokeAttribute>
<MTTagInvokeContent></MTTagInvokeContent>
</MTTagInvoke>
&quot;<MTGetVar name="a">&quot;

また、オリジナルの(Perl版の)MTTagInvokeでは、<MTTagInvoke>?</MTTagInvoke>間の各タグ(<MTTagInvokeName>, <MTTagInvokeAttribute>, <MTTagInvokeContent>)の登場順序は不問(どの順番でも正常に処理されます)ですが、拙作のPHP版では<MTTagInvokeContent>の後に<MTTagInvokeName>や<MTTagInvokeAttribute>が現れた場合はその指定が反映されません。
例えば、以下のような記述を考えます。

<MTTagInvoke name="MTEntries">
<MTTagInvokeContent><$MTEntryTitle$></MTTagInvokeContent>
<MTTagInvokeAttribute name="lastn">1</MTTagInvokeAttribute>
</MTTagInvoke>

こちらもスタティックなHTMLとして再構築した場合、きちんと最新のエントリーのタイトルが1件のみ表示されます。
しかしダイナミック・パブリッシングでは、lastn="1" の指定が有効にならないため、表示可能なエントリーのタイトルがすべて表示されてしまいます。
どちらでも正常に動作させるには、<MTTagInvokeAttribute>を<MTTagInvokeContent>よりも先に記述する必要があります:

<MTTagInvoke name="MTEntries">
<MTTagInvokeAttribute name="lastn">1</MTTagInvokeAttribute>
<MTTagInvokeContent><$MTEntryTitle$></MTTagInvokeContent>
</MTTagInvoke>

前者は改善の余地がありますが、後者はPHP版プラグインの仕様上 回避困難(たぶん不可能)です。

<<<詳細を隠す

ただ、通常は自然と上記2点に沿って記述すると思いますので、普通に使用する分には問題は起こらないと思われます。
もし「あれ? 期待通りに表示されないな?」と思ったら、これらの問題点を思い出していただければ幸いです。

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

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

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

トラックバック(1)

オラオラ - 最近のMTプラグイン・要チェックサイト (2007年3月13日 21:41)

ここ最近のMTのプラグイン関連での要チェックサイトは、「Junnama Online (Mirror)」と「あんちもん2.Lab」です。特に あんちもん2... 続きを読む

カテゴリ

月別 アーカイブ

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

このブログ記事について

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

ひとつ前のブログ記事は「SbCodeプラグイン - 技術情報」です。

次のブログ記事は「ダイナミック・パブリッシング対応 VarHandler プラグイン」です。

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