概观
在2009年底,我为PHP / HTML编写了一个简单的模板系统,供我们的设计人员在小册子类网站上使用.该系统的目标是通过PHP处理的自定义标记允许模板化其他纯HTML.例如,模板化页面可能如下所示:
模板本身可能如下所示:
除了Page和Content / Container标签之外,核心中还包含一些其他标签,用于流控制,迭代集合,输出动态值等.框架的设计使得添加自己的一套很容易.标记在另一个前缀和命名空间下注册
我们如何解析这些自定义标签?由于无法保证HTML文件是格式良好的XML,因此XSLT / XPATH等解决方案将不可靠.相反,我们使用正则表达式来查找带有已注册前缀的标记,并用PHP代码替换它们. PHP代码是基于堆栈的设计……在遇到开始标记时,表示标记的对象被创建到堆栈上,并且其“初始化函数”(如果有的话)运行.每当遇到已注册的结束标记时,最新的对象将从堆栈中弹出,并且其“呈现函数”将运行.
因此,在框架用PHP替换模板标签之后,我们的示例页面可能看起来像这样(实际上它有点丑陋):
PHP $tags->push('tt','Page',array('template'=>'templates/main.html')); ?>
PHP $tags->push('tt','Content',array('name'=>'leftColumn')); ?>
PHP $tags->pop(); ?>
PHP $tags->push('tt',array('name'=>'rightColumn')); ?>
PHP $tags->pop(); ?>
PHP $tags->pop(); ?>
好的,坏的和评估
现在,如何执行我们新生成的PHP代码?我可以在这里想到几个选项.最简单的方法是简单地评估字符串,这样就足够了.但是,任何程序员都会告诉你“eval是邪恶的,不要使用它……”所以问题是,我们可以在这里使用比eval更合适的东西吗?
我已经考虑使用临时或缓存文件,使用PHP://输出流等,但据我所知,这些并不比eval提供任何真正的优势.缓存可以加快速度,但实际上我们对这个东西的所有站点已经非常快,所以我认为此时不需要进行速度优化.
问题
对于此列表中的每个事项:这是一个好主意吗?你能想到一个更好的选择吗?
>一般的整个想法(html / PHP的自定义标签)
>将标签转换为PHP代码而不是直接处理
>基于堆栈的方法
>使用eval(或类似)
感谢阅读和TIA的任何建议. 原文链接:https://www.f2er.com/html/425714.html