Movable Type 4.0 beta 2でのphp化とXML宣言

php化は3.3と同様に変更できるが、php化を行ってもXML宣言記述したい。

拡張子phpとした場合にはXML宣言は以下のようになる(ダイナミックパブリッシングの場合は除く)

<?php echo '<?xml version="1.0" encoding="<$MTPublishCharset$>"?>'."\n" ?>

テンプレートにそのまま追加すれば良いのだが、moduleとしてmdlXMLDec等と名前を付け、MTIncludeで挿入したい。

<$MTInclude module="mdlXMLDec"$>

しかしシステムテンプレートはcgiなので、<?php echo ''."\n" ?>は不要となる。

MTIfを利用して分岐を作ってみる。
システムテンプレートの先頭3行目には以下の記述がある。

<MTSetVar name="system_template" value="1">

これを利用して分岐させる

<MTIf name="system_template"><?xml version="1.0" encoding="<$MTPublishCharset$>"?>
<MTElse><?php echo '<?xml version="1.0" encoding="<$MTPublishCharset$>"?>'."\n" ?></MTElse></MTIf>

それではどこに挿入するのか。

インデックステンプレート

<MTSetVar name="page_id" value="main-index">
<MTSetVar name="main_template" value="1">
<MTSetVar name="main_index" value="1">
<MTSetVar name="sidebar" value="1">
<MTSetVar name="module_recent_posts" value="1">
<MTSetVar name="module_category_archives" value="1">
<MTSetVar name="module_author_archives" value="1">
<MTSetVar name="module_monthly_archives" value="1">
<$MTInclude module="Header"$>

<$MTInclude module="Header"$>の前に挿入する。しかし、XML宣言は必ず文書の1行目に記述することになっているのでソース上の先頭の8行と空白の1行が邪魔である。

あるブログでの以下のようなやり取りを参考にさせていただいた。

MTIf系とMTSet系など、条件分岐と設定に関するタグはパブリッシュ段階でnullに置き換えられます。 で、改行はそのまま残るので空白行が山盛りになります。

全てを1行で記述する

<MTSetVar name="page_id" value="main-index"><MTSetVar name="main_template" value="1"><MTSetVar name="main_index" value="1"><MTSetVar name="sidebar" value="1"><MTSetVar name="module_recent_posts" value="1"><MTSetVar name="module_category_archives" value="1"><MTSetVar name="module_author_archives" value="1"><MTSetVar name="module_monthly_archives" value="1"><$MTInclude module="mdlXMLDec"$><$MTInclude module="Header"$>

注意:ベータ2のスタイルシートはXML宣言があるとIE6で表示が左寄りとなります。スタイルシートに互換モード対応のカスタマイズが必要です。

追記:一部誤りがありましたので修正いたしました。

Posted