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>

或者你可以通过首先组合变量(或者不首先设置 foofoo1 来做一些与普通模板标签类似的事情,这取决于它们的值来自哪里):

<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)非常灵活,通常有不止一种方法可以做到。希望能让你们更亲近!