几年前,我用 PHP 创建了一个小型网站,该网站现在已经发展壮大,您可能会猜到它相当混乱。尽管我确实有一个单独的模板来完成 html 的最终输出,但我最终还是不得不在代码的“业务逻辑”部分处理大量的 html。
我的主要问题是页面包含各种小部件(如“最新条目”、广告等),这些小部件在页面之间发生变化,因此它们的 html-(模板-)代码不能硬编码到模板中。事实上,即使是主内容容器也是一个小部件,因为页面结构(或布局)总是相同的。
所以我最终得到了一个在代码的业务逻辑部分生成的包含 $templateData['mainContent']、$templateData['widget1']、$templateData['widget2'] 等的数组。
我该如何解决这个问题?
看了一会儿,似乎有两种方法可以解决这个问题:
显而易见的方法是使用具有继承和包含的专用模板语言,就像 django 一样,但考虑到这些语言的复杂性,我不太愿意再学习其中一种。另外,我在使用 django 期间注意到的一点是,它并不是特别快(尤其是因为它诱使人们也将这种模板用于 css 和 javascript)。
另一种选择是使用 PHP 本身提供的模板功能。但这意味着每个小部件都有自己的 php 模板,并通过包含模板文件生成其 html 代码,并使用输出缓冲捕获结果。这是一个好主意吗?因为我仍然在逻辑部分内的变量中使用 HTML。此外,这种滥用输出缓冲不是为了它不打算用于的东西吗?那么性能呢?(我正在写入/读取/刷新的缓冲区在哪里?调用 ob_* 函数有多贵?)
据我所见,这两种变体都有拥护者。就我个人而言,我更喜欢选项 2(因为这是我已经在做的事情),但是 html-in-variables 感觉非常错误,我怀疑我是否会以这种方式解决任何问题。
是否有其他选择?你是如何解决这个问题的?