我希望在php中建立自己的模板层作为我的OOP框架的一部分,但我正在寻找如何正确做到这一点的一些例子。我希望避免解析每个html文件来找到告诉模板引擎要做什么的注释,而是使用更快/更干净/更现代的技术。我只需要一些例子,因为我使用谷歌环顾四周,没有任何东西引起我的注意。我试图将我的表示和逻辑分开,但我所做的事情需要大量的逻辑来处理html代码。
,谢谢
附注:我不想使用像smarty这样的现有模板引擎,我想建立自己的模板引擎。
发布于 2009-04-26 01:17:28
我会问你同样的问题,就像我问任何建议Smarty的人一样:
PHP是一种模板语言,为什么要添加模板语言呢?
PHP是一种模板语言。我认为人们忘记了这一点,或者试图把它当作一种纯粹的面向对象语言,which it isn't。发挥PHP的优势。不要试图让它变成不是的东西。
话虽如此,很难回答你的问题,因为你没有说出你的模板系统有多简单或多复杂,也就是你打算支持什么功能。
如果您的模板语言相对简单,那么可以使用正则表达式。然而,对于一些微不足道的情况,这是行不通的。控制结构的嵌套可能是最常见的。在这种情况下,您需要编写某种形式的初级解析器。
假设所有的模板结构都是这样的块:
{:...:}
因为这种情况在HTML页面中发生的可能性相对较小(尽管,为了完整性,您需要满足用户确实想要使用这些字符组合的情况。
您需要扫描文件中的此类表达式,并对其进行相应的处理。正则表达式可以用来查找它们,但不一定是匹配的,例如for conditional includes:
{:if ...:}
Some conditional content
{:endif:}
为什么?因此:
{:if *some condition*:}
{:if *some other condition*:}
Some other conditional content
{:endif:}
Some conditional content
{:endif:}
将其与正则表达式进行匹配是不可靠的,因此您需要将文件解析为某种形式的词位树,然后对其进行处理。
发布于 2009-04-26 00:25:12
您是否考虑过模型-视图-控制器模式?您可以使用函数和变量(控制器内部)抽象所有逻辑,并将它们公开给视图。这可能是模板化的第一步。
附言:我测试了一个叫做PHPTAL (模板属性语言)的模板引擎。我喜欢它,因为您可以在不破坏设计的情况下,创建具有嵌入到自定义html属性中的逻辑的html模板。
我希望这些想法对你有所帮助。
发布于 2009-04-27 13:06:37
最快的方法是使用php本身,因为php是一种模板语言。当然,有时出于安全考虑,这并不是一个好的选择,而且设计师必须学习基本的php (这真的很痛苦)。有时,它也会变得非常丑陋,而其他更专业(更不强大)的模板系统可以保持它的整洁。
所以,如果你真的要构建你自己的,我有3个选择…
<loop item="$myVariable" times="$x">
<print name="$myVariable->name" entities="yes" nl2br="yes" purify="removeemptytags, xss"/>
<hr/>
</loop>
已经看起来有点像聪明人了,小家伙。您只需要做一些解释(回显循环节点的子节点$x次),或者可能将其转换为php并缓存(出于性能考虑,smarty会这样做)。
或者,如果你更喜欢注释,就像这样(但在这里你必须做比使用定制标签更多的解析)
<!-- begin loop:myVariable -->
<-- print:myVariable->name() -->
<hr/>
<!-- end loop -->
我无法想象DOM方法会很快,但如果你真的需要更快的速度,转换成原生php代码和/或缓存呈现的html会更好(如果速度真的是的那么重要,不要写你自己的代码。除非你是carmack或者skeet )。
祝好运。
https://stackoverflow.com/questions/789944
复制相似问题