TopMovable TypeカスタマイズPHP化 > 2007年8月
2007年8月 8日

Movable Type 4 の PHP 化で XML 宣言を自動的に切り替える

August 8,2007 1:27 AM
Tag:[, , , ]
Permalink

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行に丸めてください(視認性は落ちます)。他のアーカイブテンプレートも同様です。

参考:オラオラ:MT4のヘッダ部分

3.注意事項

アーカイブインデックス(archievs.html/archives.php)の判断はできていません。インデックステンプレートの拡張子の判断には MTIndexBasename を用いていますが、これはメインページのファイル名しか取得されないためです。

4.その他

アーカイブの拡張子を php にすると、ウェブページは .html と .php の両方が選択できるようです。が、ウェブページ新規作成画面の出力ファイル名には php しか表示されません(フィードバック済)。

2007.09.18
リストに extension="1" を追加しました。

2007.10.28
システムテンプレートに対する考慮漏れを対処しました。

Comments [16] | Trackbacks [3]
Now loading...
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site
loading ...
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 5.12