「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
ダイナミックパブリッシングのテンプレートにPHPを直接に書く
Movable TypeのテンプレートにPHPのコードを直接に書いて、さまざまな処理を行うこともできます。
ただ、スタティックパブリッシングとダイナミックパブリッシングでは、PHPのコードを書く際の書き方が違います。
その点について解説します。
1.PHPのコードをSmartyのタグで囲む
スタティックパブリッシングの場合、テンプレートの中に「<?php」~「?>」のPHPのブロックを入れて、PHPのコードを直接に書くことができます。
一方、ダイナミックパブリッシングでは、この方法を使うことはできません。
ダイナミックパブリッシングは内部的にSmartyを使っていますので、Smartyの書き方をする必要があります。
通常のSmartyでは、テンプレート内にPHPのコードを直接に書くには、「{php}」と「{/php}」のブロックを入れます。
ただし、Movable Typeのダイナミックパブリッシングでは、Smartyのタグを「{{」と「}}」で囲むようになっています。
したがって、テンプレート内に「{{php}}」と「{{/php}}」のブロックを入れれば、その中にPHPのコードを直接に書くことができます。
例えば、テンプレートに以下を追加するとします。
このページを表示すると、PHPのブロックの位置に、現在の日時が出力されます。
{{php}} echo date('Y年m月d日 H時i分'); {{/php}}
2.テンプレートタグをPHPのコードに入れない
スタティックパブリッシングのテンプレートにPHPのコードを入れる場合、そのコードの中にテンプレートタグを混ぜて書くことができます。
例えば、以下のように書くとします。
$blog_name = '<$mt:BlogName$>';
この場合、再構築の時点でMTBlogNameタグが実際のブログ名に置き換わります。
そして、ページを表示する時点でPHPが実行されて、変数$blog_nameにブログ名が代入されます。
一方、ダイナミックパブリッシングを使って、以下のように書くとします。
{{php}} $blog_name = '<$mt:BlogName$>'; {{/php}}
このように書くと、残念ながらページを表示する際にエラーになります。
テンプレートタグの値をPHPのコードの中で使いたい場合は、そのテンプレートタグの値をMTSetVarタグでテンプレートの変数に代入し、それをPHPの変数に代入する、という手順を取ります。
例えば、上の例のように、ブログ名を変数$blog_nameに代入するなら、テンプレートに以下のように書きます。
<$mt:BlogName setvar="blog_name"$> {{php}} global $mt; $vars =& $mt->context()->__stash['vars']; $blog_name = $vars['blog_name']; {{/php}}
3.なるべくプラグイン化する
ここまでで述べたようにすれば、テンプレートにPHPのコードを直接に書くことができます。
ただ、なるべくは、テンプレートに直接にコードを書かずに、その処理をプラグイン化することをお勧めします。
ダイナミックパブリッシングはSmartyで処理されますので、プラグインの作り方もSmartyに沿った形になります。
Smartyでダイナミックパブリッシング用のプラグインを作る方法は、またの機会に解説したいと思います。