<if a == 5 && b < 4>
one
<else>
<if a != 5>
two
<else>
<if a == 5 || $b == 5>
three
</if>
</if>
</if>
我如何从中得到一些变数:
[0] = "a == 5 && b < 4"
[1] = "one"
[2] = "a != 5"
[3] = "two"
[4] = "a == 5 || $b == 5"
[5] = "three"
或者您如何建议在模板中制作条件?
答案 0 :(得分:5)
我一般都没有反对模板系统,但为什么不使用普通的PHP呢?
<?php if ($a == 5 && ($b < 4)): ?>
one
<?php elseif ($a != 5): ?>
....
我没有看到在PHP中痛苦地重建解析和评估逻辑的好处。
如果你真的需要这个,我会使用Smarty。
答案 1 :(得分:2)
一旦开始向模板语言引入流控制结构(if,loop ...),就会失去仅通过对变量应用搜索和替换来应用模板的能力。您需要开始解析模板以提取依赖于条件的部分,并在需要时单独重新插入它们。
您最终可能会做的是应用一个初始解析步骤:
Template "main" : FOO <if a> BAR </if> QUX
进入:
Template "main" : FOO {temp-if-a} QUX
Template "temp" : BAR
然后,如果a
为真,您将应用模板temp
并在呈现模板{temp-if-a}
时将其存储到变量main
中。如果a
为false,则不会为{temp-if-a}
提供任何值。
其他控制流结构可以类似地使用此 extract-apply independent-replace 序列实现,包括嵌套序列(只需让您的模板应用程序算法递归工作)。