コンテナタグとグローバルフィルター on MT3.3x
Category : Memo
2ヶ月ほど前、コンテナタグとグローバルフィルターという記事で、
『ダイナミックページでは、コンテナタグへのグローバルタグアトリビュート(グローバルフィルター)の適用が無効』
と書きました。
この問題は、MT3.3xでは解決されています。
MT3.2でも、MT3.3xで変更された.phpファイルをコピーすれば、ほぼ問題なく動作します。
※【2006/09/20 追記あり】
今回の現象、その理由を探るべく、PHPやSmarty(MTのダイナミックパブリッシングで使用されているPHPのテンプレートエンジン)の仕様を調査していました。
その上でソースを見たら、気づいてしまったというわけです。
prefilter.mt_to_smarty.php というファイルが、ちょうどその問題の箇所を修正するように、その部分に該当する箇所だけに変更の手が加えられていた、ということに。
ということで、現在MT3.2をご使用の方のために、この問題を解決する方法をメモしておきます。
- MT3.3x(最新版、9/14時点で3.32)のアーカイブをダウンロード
- 解凍して得られた [MT33]/php/lib/prefilter.mt_to_smarty.php というファイルを、現在稼動しているMTの [MT]/php/lib/prefilter.mt_to_smarty.php に上書きコピー(アップロード)(※1)
※1【2006/09/20 追記】アップロード前に、以下の編集を施しておくことをオススメします:
新しい prefilter.mt_to_smarty.php の50行目(以下参照)を削除またはコメントアウトする:
47:
48: # special tag step for stripping any conditional 'static' code.
49: $tpl_source = preg_replace('/<MTIfStatic[^>]*?>.*?<\/MTIfStatic>/s', '', $tpl_source);
50: $tpl_source = preg_replace('/<MTIgnore\b[^>]*?>.*?<\/MTIgnore>/s', '', $tpl_source);
51:
52: if ($parts = preg_split('!(<(?:\$?|/)MT(?:.+?)(?:\$?|/)>)!s', $tpl_source, -1,
53: PREG_SPLIT_DELIM_CAPTURE)) {
↓
47:
48: # special tag step for stripping any conditional 'static' code.
49: $tpl_source = preg_replace('/<MTIfStatic[^>]*?>.*?<\/MTIfStatic>/s', '', $tpl_source);
50: # $tpl_source = preg_replace('/<MTIgnore\b[^>]*?>.*?<\/MTIgnore>/s', '', $tpl_source);
51:
52: if ($parts = preg_split('!(<(?:\$?|/)MT(?:.+?)(?:\$?|/)>)!s', $tpl_source, -1,
53: PREG_SPLIT_DELIM_CAPTURE)) {
これは、MTIgnore というMT3.3で追加されたMTタグを機能させるための記述であり、MT3.2ではサポートされていないので、間違って<MTIgnore …>~</MTIgnore>と記述された場合にMT3.3と同様の動作をしてしまうための対策です。
MT3.2で MTIgnore は決して使用しない、ということであればコメントアウトする必要はありません。
なお、サーバ上でファイルの編集ができる場合はアップロードしてから編集してもかまいません。
【追記ここまで】
以上。





コメントする