【问题标题】:PHP translate and template enginePHP翻译和模板引擎
【发布时间】:2013-07-23 15:55:49
【问题描述】:

我正在开发我的新 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 并在该文件中添加我的变量它不起作用。我将该文件包含在我的 index.html 中,该文件位于使用 PHP 的父文件夹中,或者我修改后的 HTML 注释不起作用。我想在包含的文件中添加 [lang_translate] 或在标题或索引中添加 $lang['cat_categories'] (即使在 index.html 中也不起作用)以显示翻译。

所有文件路径都可以正常工作。我现在能做什么?

【问题讨论】:

    标签: php oop templates translate


    【解决方案1】:

    那么这样做应该可行:

    // function names migt differ. Check output buffering on php.net
    Ob_start();
    include index.html;
    $contents = ob_get_clean();
    

    现在内容也会有头文件。顺便说一句,我建议您使用模板引擎。对某人创建的未知模板文件使用 eval 可能会有风险。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多