ファイルが散らばっていて、リストが不完全です。これまでに提供したすべてのファイルを以下にリストしました。
上記の@Jonathonは正しいです.PHPファイルとファイルの出力をキャプチャするために出力バッファリングを使用する必要がありinclude()
ます(ファイルをfile_get_contents()
実行しません)。
[編集] ローカル環境でこれらすべてのファイルを再作成し、@Jonathon の提案が完全に機能することを確認しました。提案されたコードを含めるためにdev/replacements.phpを更新しました。
さらに、TemplateLibrary
クラスにさらに 2 つの関数を追加replaceFile($key, $filename)
しました。file_get_contents($filename)
これにより、頻繁に繰り返す必要がなくなり、出力をキャプチャしながらreplacePhp($key, $filename)
実行されるinclude()
ため、PHP ファイルを含める複雑さをカプセル化できます。
幸運を!
main.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();
dev/templatelibrary.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;
}
}
index.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>
replacements.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 でインクルードを使用するようにしました