smarty如何从内存中包含文件并分配所有父模板变量?

时间:2014-05-05 12:35:50

标签: php templates smarty

我有以下函数从文件中加载模板:

public function renderText($text, $data=[], $return=false) {
    $template = $this->smarty->createTemplate('string: '.$text, null, null, $data);
    if($return)
        return $template->fetch();
    else
        $template->display();
}

我使用

加载带有所需变量的模板
$this->renderText(Yii::app()->smarty->renderText($object->readData(), ['contract'=>$contract], true));

这适用于我的情况。但是,我需要扩展此功能,以便我可以从内存中加载此模板中的另一个模板。像{{include}}这样的函数,但是我的应用程序特有的并且是从内存加载的。到目前为止,我有这个函数include_content

$template = Object::model()->findByAttributes(['name'=>$params['template']]);
echo $template->readData();

但是这并没有读取变量,只是像字符串一样打印它们:所以如果我有两个模板:

主要:{{include_content template="SomeBody"}}

SomeBody:{{$contract->id}}

如果我打开" Main",我需要它打印合同ID,而不是字符串" {{$ contract-> id}}",

我已经尝试过再次使用renderText函数,但该函数并没有在其中添加父模板的变量。我能做些什么来实现这个目标?

谢谢,

1 个答案:

答案 0 :(得分:1)

也许你需要获取功能?它允许您解析smarty模板并将输出设置为变量。在Smarty手册中:http://www.smarty.net/docs/en/api.fetch.tpl