我正在使用某个框架,其中主要开发人员正在考虑从基于PHP的本机模板切换到XSLT模板。
我担心这不可行,因为在我们的网站上,我们通常会有非常复杂的模板逻辑。
对于像这样简单的事情:
if ( $something ) { ?>
<p><?php if ( $another ) { ?>Lorem Ipsum<?php } else { ?>Dolor amet<?php } ?>.</p>
<?php } else { ?>
<p><?php if ( $another ) { ?>Lorem Ipsum<?php } else { ?>Dolor amet<?php } ?>.</p>
<?php } ?>
等效的XSLT将是:
<xsl:choose>
<xsl:when test="blah">
<xsl:choose>
<xsl:when test="another">
<p>Lorem Ipsum.</p>
</xsl:when>
<xsl:otherwise>
<p>Dolor amet.</p>
</xsl:otherwise>
</xsl:when>
<xsl:otherwise>
<xsl:when test="another">
<p>Lorem Ipsum.</p>
</xsl:when>
<xsl:otherwise>
<p>Dolor amet.</p>
</xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
有了这么简单的代码片段,当我想到高级场景时,它会让我感到害怕。
我想知道是否有人经历过类似的模板转换,如果是这样,你是如何应对它的?你回去了吗?
答案 0 :(得分:6)
在XSLT 1.0中,您建议的代码可以简化为:
<p>
<xsl:choose>
<xsl:when test="blah">
<xsl:when test="another">Lorem Ipsum.</xsl:when>
<xsl:otherwise>Dolor amet.</xsl:otherwise>
</xsl:when>
<xsl:otherwise>
<xsl:when test="another">Lorem Ipsum.</xsl:when>
<xsl:otherwise>Dolor amet.</xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</p>
在XSLT 2.0中,它可以进一步简化为:
<p>
<xsl:value-of select="if (test=blah)
then if (test=another) then 'Lorem ipsum' else 'Dolor amet'
then if (test=another) then 'Lorem ipsum' else 'Dolor amet'"/>
</p>
这让我觉得比PHP原版好很多。
对于更一般的问题,XSLT确实有一个陡峭的学习曲线。那些坚持并掌握概念的人通常对语言非常满意。但是很多人在达到这一点之前就会冷落并放弃,因为它与以前遇到的任何事情都有所不同。
答案 1 :(得分:1)
根据我的经验,最终,我总是回到简单的.phtml
文件 - 这不是正确的事情或理想的事情,但是当时解决了这些问题的原因。
XSLT从来没有为我做好事,即使对于更简单的逻辑模板也是如此。
如果有任何模板系统让我开心,那就是Twig。