Codeigniter + Dwoo

时间:2010-12-24 09:06:20

标签: templates codeigniter dwoo

使用Codeigniter 1.7.2和Dwoo实现我的CMS时出现问题。我使用Phil Sturgeon Dwoo库。我的问题是我希望用户从管理面板创建模板,这意味着所有模板都将存储到数据库中,包括所有Dwoo变量和函数。我的问题:

  1. 是否可以从数据库加载dwoo模板?
  2. 如何从数据库解析dwoo变量或函数?我试图加载数据库中的内容,其中包括dwoo var和函数,我尝试使用dwoo eval()函数和phil sturgeon string_parse()进行评估,但仍然没有运气。
  3. 例如:

    我的控制器

    $data['header'] = "<h1>{$header}</h1>"; --> this could be loaded from database
    
    $this->parser->parse('header',$data);
    

    我的观点

    {$header}
    

    这是错误消息:

    <h4>A PHP Error was encountered</h4>
    
    <p>Severity: Notice</p>
    <p>Message:  Undefined index:  header_title</p>
    <p>Filename: compiled/805659ab5e619e094cac7deb9c8cbfb5.d17.php</p>
    <p>Line Number: 11</p>
    

    header_title是从DB加载的dwoo变量。

    谢谢,

1 个答案:

答案 0 :(得分:1)

绝对可以这样做,但出于性能原因,将模板作为文件存储在文件系统上可能会更快,即使它们是由用户编辑的。如果你对文件命名很聪明,你可以避免大多数数据库命中。

无论如何,如果你真的想用数据库来做,下面应该有效:

// rendering the header
$template = '<h1>{$header}</h1>'; // loaded from db, don't use double-quotes for examples or $header will be replaced by nothing
$data = array('header' => 'Hello'); // loaded from db as well I assume
$headerOutput = $this->parser->parse_string($template, $data, true); // true makes it return the output

// now rendering the full page (if needed?)
$data = array('header' => $headerOutput);
$this->parser->parse('header', $data); // no 'true', so goes straight to output

然后视图将包含{$header},并且标头模板的输出将传递给该变量。

现在我不确定CI是如何工作的,所以最好只输出第一个模板的结果并完全跳过第二个模板,但我会把它留给你。