スタティック/ダイナミックパブリッシングの共存を考える(その3)

「スタティック/ダイナミックパブリッシングの共存を考える」の第3回として、テンプレートの変数を使って、スタティックに再構築した結果をダイナミックパブリッシングに渡す基本的な流れを紹介します。

1.考え方の基本

スタティックに再構築した結果をダイナミックパブリッシングのテンプレートに組み込む場合、前回や前々回で解説したように、MTIncludeタグで単純にファイルを読み込むのが簡単です。
ただ、テンプレートのあちこちで、スタティックパブリッシングのさまざまな結果を使いたい場合もあります。
その場合、MTIncludeタグを使う方法だと、テンプレートを大量に作る必要があり、テンプレートの管理が複雑になります。

そこで、スタティックな出力結果を、ダイナミックパブリッシングのテンプレートの変数に代入するように、PHPのスクリプトを出力するようにします。
こうすれば、個々の値を代入する処理を1つのスタティックテンプレートにまとめて書くことができ、テンプレートの数がやたらと増えるのを防ぐことができます。

また、ダイナミックパブリッシング側では、MTGetVarタグで値を出力することができます。
変数の名前をテンプレートタグの名前に近いものにしておけば、ダイナミックパブリッシングのテンプレートの可読性も良くなります。

2.PHPのファイルをMTIncludeタグで読み込む

ダイナミックパブリッシングのテンプレートの中では、MTIncludeタグでファイルを読み込んだ場合、その中のPHPのコードが実行されるようになっています。

例えば、以下のようにした「sample.php」というファイルを読み込んだとします。
この場合、sample.php内に含まれているPHPのコードが実行されます。

<$mt:Include file="sample.php"$>

3.ダイナミックパブリッシングの変数に代入する

ダイナミックパブリッシングでも、スタティックパブリッシングと同様に、MTSetVarやMTGetVar等のタグで変数を扱うことができます。
この変数を、PHPのコードの中で設定したり、値を代入したりすることも可能です。

以下のようなコードで、テンプレートの変数群を、連想配列$varsに代入することができます。

global $mt;
$ctx = $mt->context();
$vars =& $ctx->__stash['vars'];

上の処理を行った後では、テンプレートの個々の変数は、$vars['変数名']でアクセスすることができます。
例えば、テンプレート内で、以下のMTSetVarタグで、変数fooを定義しているとします。

<$mt:SetVar name="foo" value="bar"$>

この場合、$vars['foo']の値が「bar」になっています。
また、$vars['foo']に値を代入すれば、テンプレート側でMTSetVarタグで代入した値を変えることもできます。
例えば、以下のPHPのコードで、テンプレートの変数fooに値「baz」を代入することができます。

$vars['foo'] = 'baz';

テンプレート側で定義した配列やハッシュにも、同様の手順でアクセスすることができます。
配列の個々の要素は、「$vars['変数名'][インデックス]」でアクセスすることができます。
また、ハッシュの個々の要素は、「$vars['変数名']['キー']」でアクセスすることができます。

4.ダイナミックパブリッシングの変数に値を代入するようにスタティックな結果を出力する

スタティックパブリッシングでは、任意のテキストファイルを出力することができますので、PHPのコードを出力することができます。
3.のコードを含むようなテンプレートも、スタティックに再構築することができます。

そこで、実際にそのようなテンプレートを作り、その結果をMTIncludeタグでダイナミックパブリッシングのテンプレートに組み込むようにします。
こうすれば、スタティックパブリッシングの結果を、ダイナミックパブリッシングに渡して、テンプレートの変数の形で扱うことができます。

なお、この手法の具体的な例は、明日解説します。