EAM*_*ann 4 php xml scripting markup templates
我需要编写一个将在PHP下运行的基本脚本/模板引擎.理想情况下,我就可以用(X)HTML模板混合我自己的标记语言,并通过服务器端的解析器运行文件与(X)HTML提供了一个数据库的动态替换我自己的标记.
不幸的是,就我所知的PHP和脚本而言,我不太清楚从哪里开始.我的第一直觉是通过某种正则表达式解析器运行整个文档,并将我的自定义标记映射到特定的PHP函数......但这对我来说似乎有点慢和笨拙.
哪些资源/教程/示例可以指向正确的方向?为了比较,我真的很喜欢用于.NET MVC的新Razor模板引擎...我不想完全打破PHP项目,但构建类似的东西会很棒.
好的,让我更多地完善我的解释......我为WordPress开发网站.我的很多客户都希望自定义他们的网站,但每当我开始谈论PHP时就会逃跑.这是一种脚本语言,对于非专业用户来说看起来太复杂,甚至不想引起兴趣.
我想要做的是专门为WordPress创建我自己的标记形式.因此,不应使用PHP函数调用(get_header()和get_footer()和if(has_posts())......)在主题文件,你不得不XML命名空间(<wpml:header />和<wpml:footer />和<wpml:loop> ... </wpml:loop>),其转换为同样的事情.它可以更好地将模板文件与服务器端脚本分开(有几个主题将整个PHP函数直接放在主题的PHP模板文件中!!!)并且可以使非开发人员更容易开始工作自定义WordPress主题.
考虑到这一点,已经建议的TWIG和Mackrell解决方案肯定支持在文件中嵌入脚本"nuggets"的想法,但它们并没有真正帮助我将自定义XML/XHTML标记解析为服务器端可识别的内容.码.
那么......在构建新的服务器端标记处理器时,我从哪里开始?
听起来你需要的是一种模板语言,支持通过自定义标记进行扩展.鉴于PHP本身满足了这种需求,我猜你也想要某种沙盒.
为此,我建议TWIG.
默认情况下,它使用与Django和Jinja2 for Python或Liquid for Ruby相同的基本语法(虽然,虽然不推荐,但是可配置),并且它被编译为缓存PHP以提高速度.
它支持沙箱和参数自动转义以及块替换和继承,您可以选择它可以访问的变量,并且您可以设置任何您想要的默认和自定义令牌和过滤器的组合.
Smarty也可能满足你的需求,但我不确定它是否具有上述所有功能,在我看来,它的语法并不优雅,而且我被告知它比它的价值更痛苦.
无论你做什么,在发明自己的模板语言之前都要思考一下.从长远来看,这通常是一个巨大的痛苦,并且往往最终会在BobX旁边的每日WTF上结束.
更新:我得到的印象是您对使用命名空间XML进行模板操作非常着迷.是否真的值得重新发明整个模板引擎,以便用户可以使用<wpml:header />而不是{{header}}?TWIG不允许用户嵌入任意脚本......只是你已明确确定的变量和流量控制结构.