コンテナタグとグローバルフィルター
Category : Memo
Movable Type は、全てのページをスタティック(静的)に生成するモードと、一部のページをダイナミック(動的)に生成するダイナミック・パブリッシングモードを選べます。
それぞれ利点・弱点があり、両方混在することもできるのが特徴の一つですが、同じテンプレートでスタティック・ダイナミック両方に対応できるのも特徴の一つだと思います。
と思っていたのですけれど、一つ、気になる非互換性を発見してしまいました。
簡単にまとめると、以下が判明しました。
- スタティックページでは、コンテナタグへのグローバルタグアトリビュート(グローバルフィルター)の適用が有効
- ダイナミックページでは、コンテナタグへのグローバルタグアトリビュート(グローバルフィルター)の適用が無効
※【追記: 2006/09/14】この情報は、MT3.2のものです。MT3.3ではこの問題は解消されています。
拙作の単純プラグイン Span は、グローバルフィルターを範囲指定して適用させることに主眼を置いて作成したプラグイン(コンテナタグ)なのですが、これがうまくいくのは、どうやらスタティックの場合だけのようです。
尤も、現在提供しているコンテナタグはスタティック用のもののみ(Perlで作成したプラグインのみ)であり、ダイナミックページを生成するテンプレート中で<MTSpan>タグを使用すれば「そんなブロックタグはないよ」みたいなエラーになってしまうのですが、PHPで同じような動作をするブロックタグを定義しても、期待した動作をしない模様です。
そもそもスタティックページ生成とダイナミック・パブリッシングは、ベースがPerlとPHPという、基本的なアーキテクチャが異なります。
私の感覚としては、ダイナミック・パブリッシング機能が、Perlによるスタティック生成をPHPでエミュレートしたもの、という感じ。
でもやはり、互換性には無理があるようです。
て言いますか。
そもそも「ブロックにフィルターを適用する」という私の考えが邪道なのかも?
ちなみに。
Span のPHP版(ダイナミック対応版)のソースは、こんな感じでOK:
<?php # block.MTSpan.php
function smarty_block_MTSpan($args, $content, &$ctx, &$repeat) {
return $content;
}
?>





コメントする