2010-06-02 2 views
1

У меня есть простой шаблон, который является html в основном, а затем извлекает некоторые вещи из SQL через PHP, и я хочу включить этот шаблон в три разных точки другого файла php. Каков наилучший способ сделать это? Могу ли я включить его, а затем распечатать содержимое?Каков наилучший способ включить php-файл в качестве шаблона?

Пример шаблона:

Price: <?php echo $price ?> 

и, к примеру, у меня есть еще один файл PHP, который будет показывать файл шаблона, только если дата является более чем через два дня после даты в SQL.

ответ

4

Лучший способ должен передать все, что в ассоциативной массив.

class Template { 
    public function render($_page, $_data) { 
     extract($_data); 
     include($_page); 
    } 
} 

Для создания шаблона:

$data = array('title' => 'My Page', 'text' => 'My Paragraph'); 

$Template = new Template(); 
$Template->render('/path/to/file.php', $data); 

Ваш шаблон страницы может быть что-то вроде этого:

<h1><?php echo $title; ?></h1> 

<p><?php echo $text; ?></p> 

Extract действительно отличная функция, которая может распаковывать ассоциативный массив в локальный пространство имен, чтобы вы могли просто делать что-то вроде echo $title;.

Редактировать: добавлены символы подчеркивания для предотвращения конфликтов имен на случай, если вы извлечете что-то, содержащее переменную '$ page' или '$ data'.

0

Поместите ваши данные в массиве/объекта и передать его в следующей функции в качестве второго аргумента:

function template_contents($file, $model) { 
    if (!is_file($file)) { 
     throw new Exception("Template not found"); 
    } 
    ob_start(); 
    include $file; 
    $contents = ob_get_contents(); 
    ob_end_clean(); 

    return $contents; 
} 

Тогда:

Price: <?php echo template_contents("/path/to/file.php", $model); ?> 
+0

Работал отлично. Благодаря! – Jon

+0

@Jon Возможно, вы захотите начать принимать вопрос, который вы делаете; поэтому после того, как вы их не приняли. – Artefacto