前回の記事「はじめての DynamicMTML #11 - MT タグの中で PHP を実行する」の中で、「DynamicMTML では、テンプレート中の PHP も実行してくれます」と書きましたが、今回はそれについて少し詳しく見ておこうと思います。...
前回の記事「はじめての DynamicMTML #11 - MT タグの中で PHP を実行する」の中で、「DynamicMTML では、テンプレート中の PHP も実行してくれます」と書きましたが、今回はそれについて少し詳しく見ておこうと思います。
まず、DynamicMTML が有効な環境下に、以下のような普通の PHP ファイル「staticfile.php」を置いてみます。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
</head>
<body>
<h1><?php print 'Love DynamicMTML'; ?></h1>
<p><?php print $_SERVER['PHP_SELF']; ?></p>
</body>
</html>
この staticfile.php にアクセスしてみると、次のようにちゃんと表示されます。当たり前ですね。
次に、この staticfile.php の拡張子を html にしてみます。つまり、HTML ファイルに PHP のコードが書かれた状態になります。
その staticfile.html にアクセスすると何も表示されずに真っ白です。
では、この staticfile.html に次のように MTDate タグを書いてみます。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>サンプル</title>
</head>
<body>
<h1><?php print 'Love DynamicMTML'; ?></h1>
<p><?php print $_SERVER['PHP_SELF']; ?></p>
<p>現在時刻は、<mt:Date> です。</p>
</body>
</html>
この staticfile.html にアクセスすると、先ほど真っ白だったページが、PHP も MT タグもきちんと解釈されて表示されています。
ちょっと不思議に思えるかもしれませんが、次のフローチャートを見ると納得します。なお、この図は「README.ja.md at master from alfasado/DynamicMTML - GitHub」から転載させていただき、枠線を追記したものです。
上記 1〜3 について順番にフローに当てはめてみましょう。
要するに、ただの PHP ファイルですね。これについては、PHP ファイルは DynamicMTML の処理対象外([設定→全般] で変更可能)となっているので、このフローには関係がありません。
これについては、上図の青枠で囲んだ部分に該当します。このフローを見ると PHP コードが含まれる場合は実行されることになっていますが、先ほどの実験では実行されませんでした。
ここでこの PHP を実行するには、mt-config.cgi に「DynamicIncludeStatic」という環境変数に「1」を設定する必要があります。
mt-config.cgi に次の1行を設定すると、スタティックファイル中の PHP コードを実行するようになります。
DynamicIncludeStatic 1
これを設定することで、上図の青枠部分が実行されるようになります。なお、前回の記事で紹介した「DynamicPHPFirst」を設定していれば、この DynamicIncludeStatic は設定する必要はありません。
上記 2 で実行されなかったファイルに MT タグ(ここでは MTDate タグ)を追加しただけで MT タグに加えて PHP コードも動作するようになったのは、上図の赤い枠線のフローに変わったためです。ある意味、これが DynamicmMTML の基本の動作と言えるでしょう。
なお、この MT タグと PHP コードの実行順を変更する場合は、前回の記事「はじめての DynamicMTML #11 - MT タグの中で PHP を実行する」を参照してください。
以上です。