模板引擎{var}不起作用

时间:2014-07-25 12:15:44

标签: php template-engine

我制作了一个模板系统,但{var}并没有输出价值。 它只输出{var}。

这是我的模板类:

<?php
class Template {
    public $assignedValues = array();
    public $tpl;

    function __construct($_path = '')
    {
        if(!empty($_path))
        {
            if(file_exists($_path))
            {
                $this->tpl = file_get_contents($_path);
            }
            else
            {
                echo 'Error: No template found. (code 25)';
            }
        }
    }

    function assign($_searchString, $_replaceString)
    {
        if(!empty($_searchString))
        {
            $this->assignedValues[strtoupper($_searchString)] = $_replaceString;
        }
    }

    function show()
    {
        if(count($this->assignedValues) > 0)
        {
            foreach ($this->assignedValues as $key => $value)
            {
                $this->tpl = str_replace('{'.$key.'}', $value, $this->tpl);
            }
        }
        echo $this->tpl;
    }
}

?>

以下是我在索引上执行的内容:

<?php
    require_once('inc/classes/class.template.php');
    define('PATH', 'tpl');

    //new object
    $template = new Template(PATH.'/test.tpl.html');

    //assign values
    $template->assign('title', 'Yupa');
    $template->assign('about', 'Hello!');

    //show the page
    $template->show();

?>

我真的需要一些帮助,如果你能提供帮助我会非常感激。

2 个答案:

答案 0 :(得分:0)

而不是行:

$this->assignedValues[strtoupper($_searchString)] = $_replaceString;

你应该:

$this->assignedValues[$_searchString] = $_replaceString;

它会起作用。

当然我假设你的模板文件中有内容:

  

{title} {about}

答案 1 :(得分:0)

你应该改变

$this->assignedValues[strtoupper($_searchString)] = $_replaceString;

到此:

$this->assignedValues["{".$_searchString . "}"] = $_replaceString ;

这只会用值替换您的关键字。