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

これまで数回にわたって 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)までです。

便利ですね。以上です。

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

  • このエントリーをはてなブックマークに追加
Just a second...