str_replace和函数的模板问题

时间:2013-08-07 23:40:51

标签: php arrays templates replace

我使用以下内容替换.tpl文件中的大括号标记,这是一种准模板引擎。当我只需要这三个简单的东西时,我真的不想要有模板引擎的开销。我遇到的问题是,当我调用一个生成例如导航(buildNav)的函数时,当页面呈现它们由于某种原因在页面顶部解析时,而不是在大括号区域内他们应该是。发生了什么,我该如何解决?作为参考,我指的是body

数组中的函数
<?php
class Template
{
    public $path;
    public $ext = '.tpl';
    public function __construct()
    {
        $this->path = dirname(__FILE__) . DIRECTORY_SEPARATOR;
    }
    public function head($title = '')
    {
        $title = isset($title) ? $title : 'NEOU CMS';
        $replace = array(
            "page_title" => $title,
            "JQUERY_UI_CSS" => JQUERY_UI_CSS,
            "JQUERY_JS" => JQUERY_JS,
            "JQUERY_UI_JS" => JQUERY_UI_JS
        );
        echo self::parse_template('header', $replace);
    }
    public function body()
    {
        require('customize.php');
        $image = new Images();
        $replace = array(
            "profile_picture" => $image->profilePic(),
            "navigation" => buildNav()
        );
        echo self::parse_template('body', $replace);
    }
    public function footer()
    {
        $replace = array(
            "date" => date("Y")
        );
        echo self::parse_template('footer', $replace);
    }
    /**
     * @param string $filename
     * @param array $data
     */
    public function parse_template($filename, $data)
    {
        $out = file_get_contents($this->path . $filename . $this->ext);
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                $out = str_replace('{' . $key . '}', $value, $out);
            }
        }
        return $out;
    }
}
?>

0 个答案:

没有答案