我正试图围绕为PHP CMS进行模板化系统的最佳方式。我有点卡住,所以我正在寻找一些建议或想法。这是我想要的设置:
每个页面都由各种小部件(或内容块,如果您愿意)组成。每个小部件都有一个MVC架构,View很简单,主要由带有一点PHP的HTML组成。窗口小部件控制器将从模型传递信息以填充视图。
到目前为止,这么好。这是一个问题:我不想将Widget View文件包含在页面中,而是希望以字符串格式显示View。我可以做到这一点,但我目前的解决方案失去了MVC方法的一些清洁和简单性,因为模型和视图往往会结合起来。
我可能会在这里要求月亮,但我想如果我遗漏了一些明显的东西,我会提出想法。有没有办法可以保持一个简单的视图,能够填充它,执行任何语句和循环,并将结果保持为字符串?我想尽量保持简单,并希望避免使用一些大的正则表达式解析解决方案。
请注意,我正在寻找一般方法或代码示例,但我不正在寻找要集成的现有模板系统。如果您需要澄清任何内容,只需添加评论,我就会更新问题。
答案 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都很方便: - )