Movable Type 中的多个 if 条件
Multiple if conditions in Movable Type
我正在使用 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
这些是所做的尝试(不按尝试顺序排列),即使第一个条件为假,所有内容都将显示为真:
<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")>
根据我的经验,你的第一个嵌套条件示例是最常用的,但是有几种方法可以在单个条件块中实现多个测试。
首先,我们像您一样设置变量:
<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
and trim
.
提高可读性
我已经有一段时间没有写过很多Movable Type代码了,所以可能还有其他方法。 MT(和 Perl)非常灵活,通常有不止一种方法可以做到。希望能让你们更亲近!
我正在使用 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
这些是所做的尝试(不按尝试顺序排列),即使第一个条件为假,所有内容都将显示为真:
<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")>
根据我的经验,你的第一个嵌套条件示例是最常用的,但是有几种方法可以在单个条件块中实现多个测试。
首先,我们像您一样设置变量:
<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
and trim
.
我已经有一段时间没有写过很多Movable Type代码了,所以可能还有其他方法。 MT(和 Perl)非常灵活,通常有不止一种方法可以做到。希望能让你们更亲近!