はじめての DynamicMTML #11 - MT タグの中で PHP を実行する

これまで数回にわたって DynamicMTML で提供されているテンプレートタグの使い方を紹介してきました。今回はいったん雰囲気を変えて、MT タグの中で PHP のコードを実行する方法を紹介します。正確には「MT タグを実行する前に PHP を実行する」ということになります。 今回の記事では「クラシックブログ」のテーマを使って解説します。もちろん DynamicMTML が有効な環境というのが前...

これまで数回にわたって DynamicMTML で提供されているテンプレートタグの使い方を紹介してきました。今回はいったん雰囲気を変えて、MT タグの中で PHP のコードを実行する方法を紹介します。正確には「MT タグを実行する前に PHP を実行する」ということになります。

今回の記事では「クラシックブログ」のテーマを使って解説します。もちろん DynamicMTML が有効な環境というのが前提です。

出力ファイルが HTML のまま PHP コードを書いてみる

DynamicMTML では、テンプレート中の PHP も実行してくれます(※これについては次回補足します)。

そこで、試しに「メインページ」の初期状態のテンプレート(出力ファイル名:index.html)の title タグに、以下のような PHP コードを書いてみましょう。DynamicMTML の動作も確認するために、mtml タグで MTDate タグを出力するコードも併記しておきます。

<title><?php print 'HTMLのままPHP'; ?> [<mtml tag="mt:date">]</title>

このテンプレートを「保存と再構築」し、公開されたテンプレートを確認してみると、ちゃんと PHP のコードが解釈されているのが分かります。次の画像は、この index.html を表示したブラウザのタイトルバーです。

startup-dymtml-32

出力されたファイルのソースコードを確認してみると、次のようになっています。MTML タグで出力された MTDate タグが記述されています。これがちゃっと日時になって表示されているので、DynamicMTML がきちんと動作していることも確認できます。

<title><?php print 'HTMLのままPHP'; ?> [<mt:date>]</title>

これで出力ファイルが HTML のままでも PHP を実行できることが確認できました。

MT タグの中に PHP コードを書いてみる

次は、初期状態のまま、MT タグの中に PHP のコードを書いてみます。「メインページ」(index.html)のテンプレート中の「<div id="alpha-inner">」の下に、次のようなコードを書いてみます。もちろん、本当にこの内容を実現したかったらわざわざ PHP を入れる必要はありませんね、あくまで説明のためですので。

<mt:DynamicMTML>
<$mt:SetVar name="date" value="<?php print date('Ymd'); ?>"$>
<mt:If name="date" eq="20120203">
<p>今日 <mt:date>、節分の日です。</p>
<mt:elseif name="date" gt="20120203">
<p>もう <mt:date> です。豆まきしましたか?</p>
<mt:ElseIf name="date" lt="20120203">
<p>まだ <mt:date> です。豆まきの準備をしておきましょう。</p>
</mt:If>
</mt:DynamicMTML>

さて、このテンプレートを再構築して index.html を表示してみるとエラーが表示されてしまいます。

startup-dymtml-33

MT タグを解釈する前に PHP を実行する環境変数 DynamicPHPFirst

上記のようなコードを実現するためには、DynamicMTML で MT タグが解釈される前に PHP のコードを実行する必要がありますが、DynamicMTML には、これを実現するための環境変数 DynamicPHPFirst が用意されています。

DynamicPHPFirst

mt-config.cgi に次の1行を追加すると、DynamicMTML の実行時に MTML(MTタグ) よりも先に PHP のコードを実行することができます。

DynamicPHPFirst 1

さて、実際に mt-config.cgi にこの1行を追加して、先ほどの index.html にアクセスしてみます。

startup-dymtml-34

見事にきちんと表示されました。MT タグ内の PHP が先に処理され、その値によって MT タグで条件分岐が行われているのが分かると思います。

このような処理ができれば、例えば、MT タグの処理の前に、MT ではない他のデータベースに接続して、その値によって MT タグを処理するといったことができます。

また、MT タグだけでは面倒な処理、例えば「3ヶ月後の末日」を得たい場合などは、PHP の関数を使えば簡単に処理できたりもします。

<p>今日は <?php print date('Y-m-d'); ?> ですが、この記事の有効期間は、
3ヶ月後の末日(<?php print date('Y-m-d', mktime('0','0','0',date('m')+4,0,date('Y')));?>)までです。</p>

結果は次のとおり。

今日は 2012-02-04 ですが、この記事の有効期間は、3ヶ月後の末日(2012-05-31)までです。

便利ですね。以上です。

※環境変数を変えて色々と試してみる際は、環境変数を変更したら、一度サーバー上のファイルを削除して生成しなおすことをお勧めします。

Published 2012-02-04
Updated 2019-06-25