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...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner


AMN
Categories
Monthly Archives
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3