您的文件相当分散,并且列表不完整。我在下面列出了您迄今为止提供的所有文件。
上面的@Jonathon 是正确的,您将需要使用输出缓冲来捕获 PHP 文件和include()
文件的输出(以便执行)而不是使用file_get_contents()
(不执行文件)。
[编辑] 我在本地环境中重新创建了所有这些文件,并确认 @Jonathon 的建议非常有效。我已经更新了dev/replacements.php以包含建议的代码。
此外,我在您的类中添加了另外两个函数TemplateLibrary
:replaceFile($key, $filename)
这样file_get_contents($filename)
您就不必经常重复它,并且replacePhp($key, $filename)
执行一段include()
时间来捕获输出,因此您可以封装包含 PHP 文件的复杂性。
祝你好运!
主文件
<?php
require_once 'dev/dev.class.php';
require_once 'dev/templatelibrary.php';
$dev = new dev('netnoobz-billing');
$dev->loadLib('JS', 'js', 'jquery');
// template library and required files
$template = new TemplateLibrary('index');
require_once 'dev/replacements.php';
echo $template->output();
开发/模板库.php
<?php
class TemplateLibrary {
public $output;
public $file;
public $values = array();
public function __construct($file) {
$this->file = $file;
$this->file .= '.tpl';
$this->output = file_get_contents('templates/'.$this->file);
}
public function replace($key, $value)
{
$this->values[$key] = $value;
}
public function replaceFile($key, $filename)
{
$this->values[$key] = file_get_contents($filename);
}
public function replacePhp($key, $filename)
{
ob_start();
include($filename);
$data = ob_get_clean();
$this->values[$key] = $data;
}
public function output() {
foreach($this->values as $key => $value)
{
$ttr = "{$key}";
$this->output = str_replace($ttr, $value, $this->output);
}
return $this->output;
}
}
索引.tpl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>{page_title}</title>
{page_style}
</head>
<body>
{page_header}
{page_body}
{page_footer}
</body>
</html>
替代品.php
<?php
$configStyleSheet = '<style type="text/css">'
. file_get_contents('styles/default/main.css')
. '</style>';
$pageHeader = file_get_contents('templates/header.tpl');
$pageFooter = file_get_contents('templates/footer.tpl');
#$pageBody = file_get_contents('loaders/pageBody.php');
ob_start();
include('loaders/pageBody.php');
$pageBody = ob_get_clean();
$template->replace('{page_style}' , $configStyleSheet);
$template->replace('{page_title}' , 'NetBilling');
$template->replace('{page_header}', $pageHeader);
$template->replace('{page_footer}', $pageFooter);
$template->replace('{page_body}' , $pageBody);
装载机/pageBody.php
<?php echo 'test'; ?>
[编辑]从 OP 的评论中添加了loaders/pageBody.php 。
[编辑] 更新了dev/replacements.php以捕获输出缓冲区并在 .php 上使用包含