Movable Type 4 の PHP 化で XML 宣言を自動的に切り替える
PHP化を行う時にいつも面倒に思うのは、1行目の XML 宣言を PHP スクリプトに変更するか、削除しなければならいという手間が発生することです。
Movable Type 4 では MTIf タグで色々制御できるようになったので、PHP化、つまり拡張子を .html から .php に切り替えた時(あるいはその逆)に、XML 宣言を書き換えなくて良い MT タグ構成を考えてみました。
注:デフォルトテンプレートには XML 宣言は記述されていないので、XML 宣言を記述した状態を前提にしています。
1.カスタマイズ
テンプレートモジュールの「ヘッダー」の先頭に下記の青色部分を追加すればOKです。
注:分かりやすいように改行していますが、使用時は青色部分の改行・空白を削除して1行に丸めてください。
<MTIf name="entry_template">
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
<MTElse>
<MTIf name="main_index">
<MTSetVarBlock name="extension"><$MTIndexBasename extension="1"$></MTSetVarBlock>
<MTElse>
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
</MTIf>
</MTIf>
<MTIf name="system_template">
<MTSetVarBlock name="extension">html</MTSetVarBlock>
</MTIf>
<MTIf name="extension" like=".php"><?php echo('<?xml version="1.0" encoding="utf-8"?>'); ?><MTElse><?xml version="1.0" encoding="utf-8"?></MTIf>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
ウェブページにも対応させるのであれば、ウェブページテンプレートに
<MTSetVar name="page_template" value="1">
を追加して、ヘッダに下記の青色部分を追加すればOKです。
<MTIf name="entry_template">
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
<MTElse>
<MTIf name="main_index">
<MTSetVarBlock name="extension"><$MTIndexBasename extension="1"$></MTSetVarBlock>
<MTElse>
<MTIf name="page_index">
<MTSetVarBlock name="extension"><$MTPageBasename extension="1"$></MTSetVarBlock>
<MTElse>
<MTSetVarBlock name="extension"><$MTBlogFileExtension$></MTSetVarBlock>
</MTIf>
</MTIf>
</MTIf>
<MTIf name="system_template">
<MTSetVarBlock name="extension">html</MTSetVarBlock>
</MTIf>
<MTIf name="extension" like=".php"><?php echo('<?xml version="1.0" encoding="utf-8"?>'); ?><MTElse><?xml version="1.0" encoding="utf-8"?></MTIf>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
<head>
2.テンプレート修正
「追加部分を1行に丸めてください」と書きましたが、理由は、XML宣言が文書の1行目になければならないためです。
が現状のデフォルトテンプレート(XML宣言なし)では DOCTYPE 宣言が文書の1行目に表示されません(数行空きます)。
例えば、インデックスページではヘッダ情報を取得 MTInclude タグの前に MTSetVar タグが記述されており(下記赤色)、タグの末尾にある改行がそのままページに反映されてしまうためです。
<MTSetVar name="body_class" value="mt-main-index">
<MTSetVar name="main_template" value="1">
<MTSetVar name="main_index" value="1">
<MTSetVar name="sidebar" value="1">
<MTSetVar name="module_recent_entries" 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="ヘッダー"$>
かといって、MTSetVar を MTInclude の後に移動すると、ヘッダで MTIf を用いた判定処理ができなくなります。
ということで、先程と同様、これらも MTSetVar タグの改行を取り除き、MTInclude タグを含めて1行に丸めてください(視認性は落ちます)。他のアーカイブテンプレートも同様です。
3.注意事項
アーカイブインデックス(archievs.html/archives.php)の判断はできていません。インデックステンプレートの拡張子の判断には MTIndexBasename を用いていますが、これはメインページのファイル名しか取得されないためです。
4.その他
アーカイブの拡張子を php にすると、ウェブページは .html と .php の両方が選択できるようです。が、ウェブページ新規作成画面の出力ファイル名には php しか表示されません(フィードバック済)。
2007.09.18
リストに extension="1" を追加しました。
2007.10.28
システムテンプレートに対する考慮漏れを対処しました。

