Mojaviについての質問をまたもらったので回答。
内容は、 「Mojavi+SmartyでHTMLファイルを吐きたいが、Viewの中でRendererをいじってもイマイチうまくいかない」 というものです。

「ActionでSmartyRendererを使う」または「ActionChainを使う」 という方法はどうだろうか。

普通に作っておいて、ファイルに吐く必要が出たら 簡単に移行できるので後者がいいような気がする。

StaticHtml-0.1.tar.gz

[ 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: 本当に理解すること

Comments


Option