私は新しい CMS に取り組んでおり、テンプレート エンジンを作成しようとしました。その上に翻訳システムを追加しましたが、うまくいきません。テンプレートのクラスは次のとおりです。
<?php
class Template {
private $vars = array();
public function assign($key, $value){
$this->vars[$key] = $value;
}
public function render($template_name){
$path = 'templates/default/'.$template_name.'.html';
if(file_exists($path)){
$contents = file_get_contents($path);
foreach($this->vars as $key => $value){
$contents = preg_replace('/\['.$key.'\]/', $value, $contents);
}
$site_theme = 'default';
$contents = preg_replace('/\<\!\-\- if (.*) \-\-\>/', '<?php if($1) : ?>', $contents);
$contents = preg_replace('/\<\!\-\- else \-\-\>/', '<?php else : ?>', $contents);
$contents = preg_replace('/\<\!\-\- endif \-\-\>/', '<?php endif; ?>', $contents);
$contents = preg_replace('/\<\!\-\- include:(.*) \-\-\>/', '<?php include "templates/$site_theme/$1"; ?>', $contents);
$contents = preg_replace('/\<\!\-\- is_logged \-\-\>/', '<?php logged() ? include "templates/'.$site_theme.'/logged.html" : logged(); ?>', $contents);
$contents = preg_replace('/\<\!\-\- not_logged \-\-\>/', '<?php logged() ? : include "templates/'.$site_theme.'/unlogged.html"; ?>', $contents);
eval(' ?> '.$contents. ' <?php ');
} else {
// What if i told you template don't exist?
exit('<h1>Template path don't exist. </h1>');
}
}
}
?>
索引:
<?php
$template = new Template;
$template->assign('lang_title', $lang['cat_categories']);
$template->render('index');
?>
翻訳ファイル:
<?php
$lang['db_connect_failed'] = 'Unable connect to database';
$lang['cat_categories'] = 'Categories';
?>
そして、これが私の問題です。templates/default/index.html ファイルに [variable] を追加すると、すべてが機能し、表示する必要があるものが表示されます。しかし、たとえば、templates/default/inc/header.html などのテンプレートにインクルード ファイルを追加し、そのファイルに変数を追加すると、機能しません。PHPを使用して親フォルダーにあるindex.htmlにそのファイルを含めるか、変更したHTMLコメントが機能しません。インクルード ファイルに [lang_translate] を追加するか、ヘッダーまたはインデックスに $lang['cat_categories'] (index.html でも機能しない) を追加して、翻訳を表示します。
すべてのファイル パスは問題なく動作します。私は今何ができますか?