Page Top

Movable Type(MT)のスタティックパブリッシングとダイナミックパブリッシングにおけるコードの読み込まれ方の違い~その1ー自分用覚書

August 6, 2012

Movable Type(MT)でダイナミックパブリッシングが出来るようになりましたので、テーマを充ててみたのですが、スタティックパブリッシングではOKだったものが、ダイナミックパブリッシングの時では、コードの読み込まれ方が異なるようでエラーが発生するのを2点ほど見つけました。

Fatal error: Smarty error: [in evaluated template line 145]: syntax error: unrecognized tag 'mtusersessionstate' (Smarty_Compiler.class.php, line 580) in /home/xxxxx/public_html/xxxxx/xxxxx/xxxxx/php/extlib/smarty/libs/Smarty.class.php on line 1095

mt_dynamic_smarty_error.png

当初このエラーを見てもどこに原因があるのか良くわからなかったのですが、どうやらヘッダーモジュールに以下のように各アーカイブテンプレート用の<script>~</script>をまとめて記載している箇所があるのですが、これが問題だったようです。

<MTIf name="page_template">
 <script type="text/javascript">
  ~~~~
 </script>
</MTIf>

<MTIf name="comment_preview_template">
 <script type="text/javascript">
  ~~~~
 </script>
</MTIf>

これらのコードを一旦削除して更新するとエラーは消え、サイトが表示されるようになりました。ですので、これらのコードは、Movable Type(MT)のデフォルトテンプレートのように関連する各テンプレートに直接記述するか、<script>~~</script>の部分を1つずつモジュール化してウェブサイト側にまとめ、例えば次のようなブロックタグ<MTIf name="page_template">~</MTIf>で判別して読み込みを行う(ブログから読み込む場合は、マルチブログで読み込み)か、になると思います。(私は後記の方法=ウェブサイト側にモジュールとして一箇所にまとめ、利用する時はインクルードでモジュール化したコードを読み込む事で、他ブログからでもマルチブログのインクルードを使ってコードを再利用する方法にしました。)

error in template: mtif found but mtelseif was expected

が、今度はサイドナビゲーションが消えていました。先ほどのような大きなエラーメッセージはなかったのですが、サイトの下の方に「error in template: mtif found but mtelseif was expected 」というエラーメッセージが小さく表示されていました。サイドナビが表示されていないので関連のあるテンプレートはサイドバー用のテンプレートかと思いきや、コーディングの順序でサイドバー用のコードが来る前のパンくずナビ用のテンプレートのところでエラーが発生しているのがわかりました。メッセージのとおり、MTElseIfに関係があるようなのですが、MTElseIfのクロージングタグがmissingなのかな?と思いましたが、ちゃんとクロージングタグはあるし、見たところ問題はなく、スタティックパブリッシングではOKなので余計に訳がわからなかったのですが、どうも、次に表す「駄目な例」の書き方が、ダイナミックパブリッシングでは読み込めない?ようです。スタティックではOKです。

◆駄目な例
<MTIf>
<MTElseIf>
<MTElse>
 ~~~
</MTElse>
</MTElseIf>
</MTIf>

◆OKな例
<MTIf>
<MTElseIf>
<MTElse>
 ~~~
</MTIf>

ということで、上記の「OKな例」のような記述にしたところ、問題はなくなりました。ちなみに、なぜかMTElseIfだけが問題で、MTElseの分は前の書き方のままでもOKでした。とりあえずは、今のところこの2点がスタティックパブリッシングとダイナミックパブリッシングにおける違い(?)のようです。私のテーマにおいて、の話ですが。忘れないように自分用覚書です。

最新記事