0

多年来,我一直在使用自己的 PHP 模板引擎,这并不是我多年前在教程中看到的“我自己的”。但是,我已经重构了大部分代码,使其更简单、更易于使用。没有它,我很少制作 PHP 项目。

它非常基础,该类只有 3 个方法,加载、分配和渲染。加载模板文件(通常是 HTML)并将其load保存为字符串变量。assign允许将 HTML 中的引用分配给{reference}. 渲染器解析模板文件并用变量替换引用。基本上就是这样。非常基本,非常简单,对我来说可以节省时间。

我喜欢这个模板引擎,因为我讨厌将 PHP 与 HTML 等混合使用。所以我不太喜欢 PHP 本身作为模板引擎(如 WordPress 模板),尽管对于这样的东西非常强大。我不喜欢将我的文件保存为 .php 文件然后用一堆混合 PHP 代码包含/要求它们的想法,我喜欢保持简单。

然而,这个模板引擎很简陋,它不允许条件和循环,这是有时需要的两个非常重要的东西。到目前为止,我一直在通过分离模板文件来解决这个问题,然后在控制器中执行所有条件/循环。例如,我有一个主模板文件,其中有一个<ul>项目来自数据库的列表,我将只有一个单独的模板文件,其中包含该<li>项目的一行代码。在控制器中执行循环并<li>'s根据需要渲染尽可能多的内容。

这是一个介绍,所以你明白我来自哪里。现在到真正的问题...

我一直在思考和试验这种方法的替代方案,并开始在 HTML 模板文件中使用 PHP,并尽可能少地使用代码。例如,像这样:

<ul>
  <?php foreach($array as $val): ?>
  <li><?php echo $val; ?></li>
  <?php endforeach; ?>
</ul>

在控制器中是这样的:

// assuming the data comes from a 
$array = array('Item 1', 'Item 2', 'Item 3'); database...

ob_start();
eval(' ?>'.$TPL->render('main').'<php ');
echo ob_get_clean();
  • 我想说的第一点是这对我来说是一个问题。它有点违背了这个模板引擎的目的。我在echo $val那儿,打电话给我应该替换的参考。$val但是,当我有变量等待使用时,在模板渲染中替换引用不是完全愚蠢的吗?但我也不喜欢在我的模板文件中使用大量 PHP 代码的想法,我宁愿尽可能避免,而不会过多地损害整个事情。但是,我看不出我怎么能有一个参考来代替每个循环echo并将其替换为$valfor 每个循环。你对此有何看法?
  • 其次,我想听听您的意见以及您认为此解决方案可能存在的 [更多] 问题。或者如果代码中有问题或者如何改进等等......我知道我可以使用额外的方法来完成所有输出缓冲和评估以简化模板渲染,但我正在寻找其他东西我很可能忽略或完全忘记或只是错过了这些知识。

也许我想太多了,也许我应该忘记整件事,像过去几年那样继续这样做。它对我来说效果很好,并简化了我所有的项目。最后,我基本上是在寻找一种方法来简化模板文件中的条件和循环,而不需要额外的模板文件,有些只需要几行简单的代码。

4

1 回答 1

1

我相信其他语言解决这个问题的方式是通过提供服务器端标记,比如asp 中继器控件,我在这里也发现了这个问题,它建议你坚持你的解决方案,并给建议滚动他们自己的自定义模板标签的人一个 -1实现同样的目标......也许它并没有变得更简单,而且构建它是过度设计。

于 2010-09-14T04:20:16.347 回答