PHP中的简单模板方法

时间:2010-06-23 23:34:22

标签: php string model-view-controller templates

我正试图围绕为PHP CMS进行模板化系统的最佳方式。我有点卡住,所以我正在寻找一些建议或想法。这是我想要的设置:

每个页面都由各种小部件(或内容块,如果您愿意)组成。每个小部件都有一个MVC架构,View很简单,主要由带有一点PHP的HTML组成。窗口小部件控制器将从模型传递信息以填充视图。

到目前为止,这么好。这是一个问题:我不想将Widget View文件包含在页面中,而是希望以字符串格式显示View。我可以做到这一点,但我目前的解决方案失去了MVC方法的一些清洁和简单性,因为模型和视图往往会结合起来。

我可能会在这里要求月亮,但我想如果我遗漏了一些明显的东西,我会提出想法。有没有办法可以保持一个简单的视图,能够填充它,执行任何语句和循环,并将结果保持为字符串?我想尽量保持简单,并希望避免使用一些大的正则表达式解析解决方案。

请注意,我正在寻找一般方法或代码示例,但我正在寻找要集成的现有模板系统。如果您需要澄清任何内容,只需添加评论,我就会更新问题。

3 个答案:

答案 0 :(得分:3)

在包含视图脚本之前使用ob_start(),之后使用ob_get_contents()

答案 1 :(得分:1)

使用输出缓冲和函数范围的好处:

类似的东西:

class View {
   var $params;
   function get_view_template($file_path) {
      extract($this->params);
      ob_start();
      include $file_path;
      $string = ob_get_contents();
      ob_end_clean();
      return $string;
   }
}

答案 2 :(得分:0)

看看Smarty。您绝对可以将视图分开,并将小部件的模板包含在页面模板中,等等。

编辑:好的,我没有看到“我不想要现有的系统”,那么你创建一些变量注册表怎么样,每次你想要一个变量传递给你的模板系统,你打电话给VariableRegistry::assign('variable_name', $value)。我正在使用类似的东西(在http响应中与Smarty集成)。关于这一点的好处是你可以将所有传递的变量序列化为json,xml等,这些对于后来的Ajax和REST api都很方便: - )