我正在开发一个Movable Type的博客项目,我绝对不会试图在if语句中获得多个条件。
最终目标与此相当:
<mt:SetVar name="foo" value="bar">
<mt:SetVar name="foo1" value="bar1">
<mt:If name="foo" eq="bar">
<mt:If name="foo1" eq="bar1">
<div>Foobar Hooray</div>
</mt:If>
</mt:If>
我已经尝试了许多我能想到的常用组合,但是有一个我想念的吗?或者这在MT中是不可能的?
即使文档也没有引用多个条件。 https://movabletype.org/documentation/appendices/tags/if.html
这些是尝试(不按尝试顺序)并且所有都将显示为true,即使第一个条件为false:
<mt:If name="foo" eq="barf" && name="foo1" eq="bar1">
<mt:If (name="foo" eq="barf") && (name="foo1" eq="bar1")>
<mt:If name="foo" eq="barf" & name="foo1" eq="bar1">
<mt:If (name="foo" eq="barf") & (name="foo1" eq="bar1")>
<mt:If name="foo" eq="barf" AND name="foo1" eq="bar1">
<mt:If (name="foo" eq="barf") AND (name="foo1" eq="bar1")>
<mt:If name="foo" eq="barf" And name="foo1" eq="bar1">
<mt:If (name="foo" eq="barf") And (name="foo1" eq="bar1")>
<mt:If name="foo" eq="barf" + name="foo1" eq="bar1">
<mt:If (name="foo" eq="barf") + (name="foo1" eq="bar1")>
答案 0 :(得分:1)
我的第一个嵌套条件示例在我的经验中最常用,但有几种方法可以在单个条件块中实现多个测试。
首先,我们像你一样设置变量:
<mt:Var name="foo" value="bar">
<mt:Var name="foo1" value="bar1">
最简单的测试可能是在Perl中使用test
属性:
<mt:If test="$foo eq 'bar' && $foo1 eq 'bar1'">true<mt:Else>false</mt:If>
<mt:If test="$foo eq 'bar1' && $foo1 eq 'bar'">true<mt:Else>false</mt:If>
在模板中使用Perl时要格外谨慎,这样做还需要服务器安装Perl模块Safe。
那就是说,如果依靠插值来测试大量变量,你可能会更容易维护:
<mt:If test='"$foo$foo1" eq "barbar1"'>true<mt:Else>false</mt:If>
<mt:If test='"$foo$foo1" eq "bar1bar"'>true<mt:Else>false</mt:If>
或者你可以通过首先组合变量(或者首先不设置foo
和foo1
,取决于它们的值来自哪里)来执行与普通模板标签类似的操作:
<mt:SetVarBlock name="meta1"><mt:Var name="foo"><mt:Var name="foo1"></mt:SetVarBlock>
<mt:If name="meta1" eq="barbar1">true<mt:Else>false</mt:If>
<mt:If name="meta1" eq="bar1bar">true<mt:Else>false</mt:If>
这些测试的输出应该是:
true
false
true
false
true
false
为了便于阅读,您甚至应该能够在每个组件变量的单独行上构建SetVarBlock
,并明智地使用strip_linefeeds
和trim
等修饰符。
我写了很多Movable Type代码已经有一段时间了,所以可能还有其他方法。 MT(和Perl)非常灵活,通常不止一种方法。希望能让你更接近!