Smartyで変数をテンプレートとして,fetch(display)で展開する

なんか語り尽くされたネタのような気もしますが,メモとして残しておくことに.

http://api.zikula.de/__filesource/fsource_Smarty_plugins_includesclassesSmartypluginsresource.var.php.htmlがそのまんま.たぶんSmarty Frequently Asked Questions - SmartyWikiを元ネタにチェックをまともにしたものです

resource.var.phpとして,Smartyプラグインとして読まれるようにしておけば下記のようにvarというリソースとして使えるようになります.もちろん,displayしてもok

$Smarty->assign('hogehoge', 'hallo, Smarty!');
$body_var = '{$hogehoge}';
$body = $Smarty->fetch('var:body_var');
echo $body;

最初はこのテンプレートの中身はDBだったこともあって、直接DBからテンプレートを読み出そうと思ったんです.でも,使おうとする度にプラグイン作るのはアホっぽいのでやめときました

リソースのプラグインはいろいろできそうですね.

このvarみたいのも標準であればいいのに.SmartyPHPの再発明感が強いのでいずれ廃れていくような気はするんですが、考え方もPHPから離れているのかなあ.全部入りでいいと思う.たぶんSmartyって(意識しているかは別にして)PHPのやり方はイヤという人が作ったような気もする

下記
http://api.zikula.de/__filesource/fsource_Smarty_plugins_includesclassesSmartypluginsresource.var.php.htmlのコードコピーです

<?php
/**
 * Smarty plugin
 * @package Smarty
 * @subpackage plugins
 */
/**
 * Smarty plugin
 * -------------------------------------------------------------
 * Type:     resource
 * Purpose:  fetches template from a global variable
 * Version:  1.0 [Sep 28, 2002 boots since Sep 28, 2002 boots]
 * -------------------------------------------------------------
 */

function smarty_resource_var_source($tpl_name, &$tpl_source, &$smarty)
{
    if (isset($tpl_name)) {
        global $$tpl_name;
        $tpl_source = $$tpl_name;
        return true;
    }
    return false;
}

function smarty_resource_var_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
    if (isset($tpl_name)) {
        $tpl_timestamp = microtime();
        return true;
    }
    return false;
}

function smarty_resource_var_secure($tpl_name, &$smarty) {
    return true;
}

function smarty_resource_var_trusted($tpl_name, &$smarty) {
    return;
}