Mojaviについての質問をまたもらったので回答。
内容は、
「Mojavi+SmartyでHTMLファイルを吐きたいが、Viewの中でRendererをいじってもイマイチうまくいかない」
というものです。
「ActionでSmartyRendererを使う」または「ActionChainを使う」 という方法はどうだろうか。
普通に作っておいて、ファイルに吐く必要が出たら 簡単に移行できるので後者がいいような気がする。
[ ActionでSmartyRendererを使う ]
<?php
include_once(dirname(BASE_DIR)."/mojavi/lib/smarty/Smarty.class.php");
include_once(OPT_DIR."renderers/SmartyRenderer.class.php");
class CreateHtmlAction extends Action {
function execute(&$controller, &$request, &$user) {
$renderer =& new SmartyRenderer($controller, $request, $user);
$engine =& $renderer->getEngine();
$engine->compile_dir = BASE_DIR."/templates_c";
$engine->compile_id = $controller->currentModule."_".$controller->currentAction;
$renderer->setTemplate("static.html");
$renderer->setAttribute("title", "Static HTML by SmartyRenderer");
$renderer->setMode(RENDER_VAR);
$fp = fopen("staticHtmlBySmartyRenderer.html", "w");
fwrite($fp, $renderer->fetchResult($controller, $request, $user));
fclose($fp);
header("Location: ".dirname(SCRIPT_PATH)."/staticHtmlBySmartyRenderer.html");
return VIEW_NONE;
}
}
?>
[ ActionChainを使う ]
<?php
class CreateHtmlAction extends Action {
function execute(&$controller, &$request, &$user) {
$actionChain =& new ActionChain();
$actionChain->register("getHtml", "CreateHtmlByActionChain", "GetHtml");
$actionChain->execute($controller, $request, $user);
$fp = fopen("staticHtmlByActionChain.html", "w");
fwrite($fp, $actionChain->fetchResult("getHtml"));
fclose($fp);
header("Location: ".dirname(SCRIPT_PATH)."/staticHtmlByActionChain.html");
return VIEW_NONE;
}
}
?>
ref: 本当に理解すること