我需要编写一个在 PHP 下运行的基本脚本/模板引擎。理想情况下,我能够将我自己的标记语言与 (X)HTML 模板混合,并通过服务器端解析器运行文档,以动态地用数据库提供的 (X)HTML 替换我自己的标记。
不幸的是,就我对 PHP 和脚本的了解而言,我不太确定从哪里开始。我的第一反应是通过某种正则表达式解析器运行整个文档,并将我的自定义标记映射到特定的 PHP 函数……但这对我来说似乎有点慢且笨拙。
有哪些资源/教程/示例可以为我指明正确的方向?相比之下,我真的很喜欢 .NET MVC 的新 Razor 模板引擎...我不想在 PHP 项目中完全淘汰它,但构建类似的东西会很棒。
Update
好的,让我进一步完善我的解释......我为 WordPress 开发网站。我的很多客户都想定制他们的网站,但每当我开始谈论 PHP 时他们就跑开了。它是一种看起来太复杂的脚本语言,对于外行用户来说根本就没有兴趣。
我想做的是专门为 WordPress 创建我自己的标记形式。因此,不要进行 PHP 函数调用(get_header()
and get_footer()
and if(has_posts())
...) 在主题文件中,您将拥有命名空间 XML (<wpml:header />
and <wpml:footer />
and <wpml:loop> ... </wpml:loop>
)这翻译成同样的事情。它将更好地将模板文件与服务器端脚本分开(有几个主题将整个 PHP 函数直接放在主题的 PHP 模板文件中!!!),并且将使非开发人员更容易开始工作自定义 WordPress 主题。
考虑到这一点,TWIG 和 Mackrell 已经建议的解决方案肯定支持在文件中嵌入脚本“块”的想法,但它们并不能真正帮助我将自定义 XML/XHTML 标记解析为服务器端可识别的内容代码。
那么……在构建新的服务器端标记处理器时我应该从哪里开始呢?
听起来您需要的是一种支持通过自定义令牌扩展的模板语言。鉴于 PHP 本身就满足了这一需求,我猜您还需要某种沙箱。
为此,我建议TWIG http://www.twig-project.org/.
默认情况下,它使用与 Python 的 Django 和 Jinja2 或 Ruby 的 Liquid 相同的基本语法(尽管不推荐,但这是可配置的),并且它被编译为缓存的 PHP 以提高速度。
它支持沙箱和参数自动转义以及块替换和继承,您可以选择它可以访问的变量,并且可以设置默认和自定义令牌和过滤器的任何组合。
Smarty http://www.smarty.net/也可能满足您的需求,但我不确定它是否具有上述所有功能,在我看来,它的语法并不那么优雅,而且我被告知它比它的价值更痛苦。
无论你做什么,在发明你自己的模板语言之前都要仔细思考。从长远来看,这通常是一个巨大的痛苦,并且往往会出现在《每日 WTF》上BobX http://thedailywtf.com/Articles/We-Use-BobX.aspx迟早。
Update:我的印象是您热衷于在模板中使用命名空间 XML。是否真的值得重新发明整个模板引擎以便您的用户可以使用<wpml:header />
而不是{{header}}
? TWIG 不允许用户嵌入任意脚本...只是您已明确确定的变量和流程控制结构。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)