定制PHP模板引擎

定制PHP模板引擎,php,templates,template-engine,Php,Templates,Template Engine,作为我正在从事的一个大学项目(定制的基于MVC的项目管理系统)的一小部分,我需要开发一个模板引擎。我不希望使用像Smarty这样的脱离自我的系统,因为我已经自己编写了项目的其他部分,现在不想再重复了 无论如何,到目前为止,我已经成功地编写了一些简单的代码,我有一个类,创建了一个实例,向实例添加了一些数据,然后传入了一个模板文件。该文件有一系列类似{this}的标记,然后被数据替换。简单 我遇到的问题是当涉及到循环时-即用户表或类别列表。目前,我有一个页面的模板文件(users.html),其中包

作为我正在从事的一个大学项目(定制的基于MVC的项目管理系统)的一小部分,我需要开发一个模板引擎。我不希望使用像Smarty这样的脱离自我的系统,因为我已经自己编写了项目的其他部分,现在不想再重复了

无论如何,到目前为止,我已经成功地编写了一些简单的代码,我有一个类,创建了一个实例,向实例添加了一些数据,然后传入了一个模板文件。该文件有一系列类似{this}的标记,然后被数据替换。简单

我遇到的问题是当涉及到循环时-即用户表或类别列表。目前,我有一个页面的模板文件(users.html),其中包含开始和结束标记,它们之间有一个称为{users}的模板标记。然后我有了另一个模板文件(users detail.html),它显示了一个表行,其中包含用户信息。我正在创建users-detail.html模板的一个新实例,添加数据,对其进行解析,然后将输出(html字符串)放入数组中。然后我循环这个数组,将所有字符串连接在一起,然后将其分配给users.html模板文件中的{users}标记

正如你可能从这个解释中看出的那样,这有点像个预兆,可能有更好的方法来实现我想要实现的目标。理想情况下,如果可能的话,我希望避免在模板文件中使用PHP,并且我经常需要在一个模板文件中有多个循环

如果有人对我如何做到这一点有任何提示/建议,或者有任何教程可以让我从中获得灵感,我将不胜感激


提前感谢。

我以前见过这种方法(包括循环内部的另一个模板)。我曾经做过一个旧版本的,做过(或做过)这个的。这会让事情变得非常复杂,因为你不能只在模板中添加一个循环,而不为每一层循环设置一个全新的模板

我建议你还是沿着这条路走

经典的说法是:

我不希望使用像Smarty这样的脱离自我的系统,因为我已经自己编写了项目的其他部分,现在不想再重复了

。。。表示您确实应该使用Smarty。在现实世界中,这将是一个糟糕的理由重新实施自己的东西。但我和你一样,我知道你想自己实现一些东西(因为你想学习,你觉得很有趣,你是一个完美主义者,等等)。只要你在自己的时间里做这件事,而且这是一个个人项目,就去做吧


值得研究Smarty,看看它是如何工作的(不仅仅是语法,还包括它如何编译模板、存储编译后的版本等)。您是否愿意用PHP编写一个能够编译模板语言并输出PHP的标记器/解析器?如果你有足够的能力去做,那就去做吧。最简单的方法是读入一个标签,比如
{foreach from=$something}
,然后将其翻译成
。您可以检查令牌类型等,以确保模板标记有效,等等。

查看h2o模板的源代码——应该会对您有所帮助。您为什么不查看现有模板引擎的代码,这些引擎包含您正在查找的内容并从中学习呢?有什么比一个实际的例子更好呢?