Movable Type 4 で PHP 化する時の注意事項
Movable Type 4 では、「ヘッダー」「フッター」「サイドバー」等、各ページで共通的に使える部分を「テンプレートモジュール」として定義しているので、一ヶ所を修正して再構築すれば全ページに反映されるという、いわゆる「保守性」が向上しました。
しかし、PHP 化を行っている場合、テンプレートモジュールに PHP スクリプトが記述されていると、PHP 化の対象とならない「システムテンプレート(コメントプレビュー/コメント完了/検索結果)」にも PHP スクリプトが表示されてしまうため、期待しない表示になるケースがあります。
以下、システムテンプレートで PHP スクリプトを表示しない回避策を示します。
1.基本
PHP スクリプト全体を、下記のように MTUnless タグで括ります。
<MTUnless name="system_template">
:
[PHP スクリプト]
:
</MTUnless>
とする必要があります。name 属性の system_template はお分かりのようにシステムテンプレートであることを示す変数で、この条件を満たさない場合、つまりシステムテンプレートでない場合のみ、MTUnless タグのブロックを実行します。
代表的な例として、ヘッダの先頭(=ページの先頭)に
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
がある場合は、
<MTUnless name="system_template">
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
</MTUnless>
としてください。
注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。
2.応用
PHPスクリプトの内部に、システムテンプレートでも表示させたい内容がある場合は、MTUnless タグを PHP スクリプトに部分的に適用します。
例えば、1項の XML 宣言の対処では、システムテンプレートに XML 宣言が表示されません。これを表示させたい場合は次の2つの方法があります。
2.1 PHP スクリプトを部分的に MTUnless タグで括る
システムテンプレートで実行させたくない部分だけを MTUnless タグで括ります。
<MTUnless name="system_template">
<? php echo('
</MTUnless>
<?xml version="1.0" encoding="utf-8"?>
<MTUnless name="system_template">
'); ? >
</MTUnless>
注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。
2.2 MTElse タグを利用する
MTElse タグを利用して、MTElse タグブロック内部には、システムテンプレートで表示させたい内容を再掲します。
<MTUnless name="system_template">
<? php echo('<?xml version="1.0" encoding="utf-8"?>'); ? >
<MTElse>
<?xml version="1.0" encoding="utf-8"?>
</MTUnless>
注:実際に使用する場合は、リストの改行をすべて除去して1行にしてください。
3.注意事項
system_template という変数は、各システムテンプレートの先頭に
<MTSetVar name="system_template" value="1">
という形で記述されているものを利用しています。
独自にテンプレートを作成されている場合は、各システムテンプレートの先頭に上記の MTSetVar タグが記述されていることを確認し、記述されていない場合は追加してください。

