Smartyのテンプレート構文をDBに登録して使用する

July 27th, 2012

正直なところ利用価値もあんまり無さそうなんだけど、とりあえずメモしておく事に。

タイトルだけだと、いまいちピンとこないので、一から順番に説明を。


Smartyのテンプレート構文をDBに登録する

Smartyのテンプレート側で利用する、変数や関数を記入したテキストデータを登録しておく。

<?php
// 下記のようなテキストをDBに登録
$tplval1 = '私は{$result.name}です。<br />';
$tplval2 = '年齢は{$result.age|number_format}歳です。';
?>

テンプレートファイルを書き換える

変更可能なテンプレートファイルを用意して置いて、内容を上記のテキストデータに書き換える。

<?php
// ファイルデータを書き換える関数
function outputTmp($file, $filepath, $value) {
    $fp = fopen($url, "w+");
    $fw = fwrite($fp, $value);
    fclose($fp);
    return $file;
}
?>

fetch()でテンプレートを出力する

第3引数を指定しないと、前回と同じ内容のデータが返ってくる。

<?php
$smarty->assign("result", array( // Smarty変数定義
    'name' => 'HOGE',
    'age' => 9999,
));
$file = 'temp/output.tpl'; // TPLファイルの場所
$filepath = $_SERVER['DOCUMENT_ROOT']. '/templates/'. $file; // ファイルパス

echo '1. '. $smarty->fetch(outputTmp($file, $filepath, $tplval1), NULL, "name");
echo '2. '. $smarty->fetch(outputTmp($file, $filepath, $tplval2), NULL, "age");
/*
出力 : 1. 私はHOGEです。
出力 : 2. 年齢は9,999歳です。
*/
?>

テンプレートのテンプレートみたいになってるので、無意味な感じもしますが...。

まあ、ポジティブにみれば、FTPを使用せずに、Smartyの変数やら関数やらIF文やらが編集できるみたいな...。

July 27th, 2012