Codeigniter + Dwoo - PullRequest
       19

Codeigniter + Dwoo

3 голосов
/ 24 декабря 2010

У меня возникла проблема при внедрении моей CMS с использованием Codeigniter 1.7.2 и Dwoo.Я использую библиотеку Phil Sturgeon Dwoo.Моя проблема в том, что я хочу, чтобы пользователь создал шаблон из панели администратора, это означает, что весь шаблон будет сохранен в базе данных, включая все переменные и функции Dwoo. Мои вопросы:

  1. Возможно ли загрузить шаблон dwoo из базы данных?
  2. Как проанализировать переменную или функцию dwoo из базы данных?Я попытался загрузить контент из базы данных, которая включает в себя dwoo var и function внутри него, и я попытался выполнить оценку, используя функцию dwoo eval() и phil sturgeon string_parse(), но все еще не повезло.* например:

    мой контроллер

    $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 - переменная dwoo, загружаемая из БД.

    Спасибо,

1 Ответ

1 голос
/ 25 декабря 2010

Это определенно возможно сделать, но по соображениям производительности, вероятно, будет быстрее хранить шаблоны в виде файлов в файловой системе, даже если они редактируются пользователями. Если вы умны с именами файлов, вы можете избежать большинства попаданий в базу данных.

В любом случае, если вы действительно хотите сделать это с базой данных, должно работать следующее:

// 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, поэтому может быть лучше просто вывести результат первого шаблона и полностью пропустить второй, но я оставлю это на ваше усмотрение.

...