MT5でダイナミックパブリッシングがエラーになるパターン

()

MovableType5.01でテンプレートをダイナミックにしたらページが真っ白になってしまう現象にずっと悩まされ続け、サーバー側の問題かと思って片付けていたら、どうやら違った。


こんな場合そうなってしまうようですという発見を2点メモ。

 

1.テンプレートモジュールの中にシステムテンプレートの内容を書き込んだ場合

ブログをいくつも立てていて、各ブログのページ内に共通のMT備え付け検索機能(窓)を付けていたり、コメント投稿も許可していると、システムテンプレートの検索結果やコメントプレビューなどのソースも当然一つのテンプレートにまとめたくなります。(親ウェブサイトのテンプレートモジュールかグローバルテンプレートなど使って)


例えばコメントプレビューテンプレートには以下のようなJavaScriptが埋め込まれています。

<script type="text/javascript">
    /* <![CDATA[ */
    var user = <$mt:UserSessionState$>;
    var is_preview = true;
    /* ]]> */
</script>

 

検索結果テンプレートにはちょい長めのJavaScriptが埋め込まれています。

<script type="text/javascript">
    /* <![CDATA[ */
    <mt:IfMoreResults>
    function getResults(page) {
        page = parseInt(page);
        if (timer) window.clearTimeout(timer);
        var xh = mtGetXmlHttp();
        if (!xh) return false;
        var res = results[page];
        if (!res) return;
        var url = res['next_url'];
(長いので以下省略)

 

このあたりのソースを親ウェブサイトのテンプレートモジュールかグローバルテンプレートに作ったグローバルヘッダー的な感じのテンプレートに記述して、

<mt:if name="comment_preview_template">や<mt:if name="search_results">の条件分岐を使って出力させれば楽ですし、スタティックで出力する分にはこれで問題なくページ表示ができました。


しかしダイナミックで出力する際に、このやり方だととうまくページを出力してくれないようです。


なので、ダイナミックで出力する普通のページ用のグローバルヘッダー(上記ソースを除いたもの)と、システムテンプレート用のグローバルヘッダー(上記ソースを入れたままのもの)と分けて対応したらなんとかなりました。

 

2. PageButeを使った場合


アーカイブページでページ分割する際には有名なプラグインであるPageButeですが、紹介ページを見ればわかるように、正式には静的ページ用ページ分割プラグインという名前です。


当然ながらダイナミックで出力するテンプレートに使ってもコンテンツが表示されないようです。


なんで、ダイナミックでページ分割してくれるように別のページ分割方法使うしかないようですね。
 

●ダイナミックパブリッシングでのページ分割 | MovableType.jp

●Perl版ダイナミックパブリッシング用ページ分割プラグイン(MT5対応版) - The blog of H.Fujimoto

 

まとめ

ダイナミックでエラーになると、何かとサーバーサイドに問題が起きているもんかと思って、サーバー強くない人にとっては、うんざりしてしまうのですが、意外と単なるバグだったり、テンプレートの内容によっては出力しない仕様の問題だったりするのかもしれません。


MT5.0 RC2 リリースノート
でもダイナミックパブリッシングでエラーするバグ修正の報告が多数出てますしね。

戦意

© 2012 戦意