PHP: простой шаблонный движок - PullRequest
4 голосов
/ 20 января 2011

У меня есть функция с именем load_template()

эта функция имеет два параметра

  • $ name => название шаблона
  • $ vars => массив ключей => значений переменных, подлежащих замене в шаблоне.

Я хочу, чтобы это работало.

в шаблоне ('test'), я хочу иметь возможность написать

<?php echo $title; ?>

затем позвоните

load_template('test', array('title' => 'My Title'));

и попросите его заполнить.

как я могу это сделать?

<ч /> Метод буферизации вывода. Я пришел с кодом ниже.
Я уверен, что это может быть улучшено.

public static function template($name, $vars = array()) {
  if (is_file(TEMPLATE_DIR . $name . '.php')) {
    ob_start();
    extract($vars);
    require(TEMPLATE_DIR . $name . '.php');
    $contents = ob_get_contents();
    ob_end_clean();
    return $contents;
  }
  throw new exception('Could not load template file \'' . $name . '\'');
  return false;
}

Ответы [ 2 ]

10 голосов
/ 20 января 2011
function load_template($name, $vars)
{
  extract($vars);
  include $name;
}

Обтекание ob_start и ob_get_clean , если вы хотите записать вывод в переменную.

2 голосов
/ 20 января 2011

Как-то так?

function load_template($name, $vars)
{
  include('template/'.$name.'.tpl'); //.tpl, .inc, .php, whatever floats your boat
}

и в template/whatever.tpl у вас будет:

...
<title><?php echo $vars['title'] ?></title>
...

...
<?php if (!empty($vars['content'])): //template still needs to know if the content is empty to display the div ?>
    <div id="content">
<?php echo $vars['content']; ?>
    </div>
<?php endif; ?>
...

Конечно, это предполагает, что вывод печатается напрямую.Вы можете распечатать файл tpl напрямую, или создать строку, или буферизовать вывод из файла tpl и вернуть его из load_template

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...