模板中的 SilverStripe 条件
SilverStripe conditionals in templates
我正在尝试修改我的一个模板,以便在除两种页面类型之外的所有页面类型上调用特定包含。
我使用的代码是:
<% if ClassName != BusinessPage || ClassName != BusinessSubPage %>
... some code here
<% end_if %>
这不起作用,因为 if 语句会传递所有页面类型,并且会触发 if 语句中的代码。
如果我将代码缩短为仅一种页面类型,它会在页面类型上给出预期结果:
<% if ClassName != BusinessPage %>
... some code here
<% end_if %>
在 if 语句中使用 ClassName
作为条件是否有一些我需要注意的意外问题可以解释我的问题?
您的 if 语句逻辑不太正确。你想要的是使用 &&
(AND
) 而不是 ||
(OR
):
<% if $ClassName != "BusinessPage" && $ClassName != "BusinessSubPage" %>
这是一个逻辑 table 显示三个不同 class 名称的结果。
$ClassName | $CN != BusinessPage | $CN != BusinessSubPage | OR | AND |
----------------|---------------------|------------------------|-------|-------|
ABC | true | true | true | true |
BusinessPage | false | true | true | false |
BusinessSubPage | true | false | true | false |
OR
列表明,无论 ClassName
是什么,结果始终为真。这就是 if 语句总是通过的原因。
另一种方法是将逻辑放在 Page_Controller
中。这使得模板在逻辑变得复杂时更易于阅读。
Page.php
public function BusinessTemplate() {
return in_array($this->ClassName, array('BusinessPage', 'BusinessSubPage'));
}
Page.ss
<% if not $BusinessTemplate %>
enter code here
<% end_if %>
我正在尝试修改我的一个模板,以便在除两种页面类型之外的所有页面类型上调用特定包含。
我使用的代码是:
<% if ClassName != BusinessPage || ClassName != BusinessSubPage %>
... some code here
<% end_if %>
这不起作用,因为 if 语句会传递所有页面类型,并且会触发 if 语句中的代码。
如果我将代码缩短为仅一种页面类型,它会在页面类型上给出预期结果:
<% if ClassName != BusinessPage %>
... some code here
<% end_if %>
在 if 语句中使用 ClassName
作为条件是否有一些我需要注意的意外问题可以解释我的问题?
您的 if 语句逻辑不太正确。你想要的是使用 &&
(AND
) 而不是 ||
(OR
):
<% if $ClassName != "BusinessPage" && $ClassName != "BusinessSubPage" %>
这是一个逻辑 table 显示三个不同 class 名称的结果。
$ClassName | $CN != BusinessPage | $CN != BusinessSubPage | OR | AND |
----------------|---------------------|------------------------|-------|-------|
ABC | true | true | true | true |
BusinessPage | false | true | true | false |
BusinessSubPage | true | false | true | false |
OR
列表明,无论 ClassName
是什么,结果始终为真。这就是 if 语句总是通过的原因。
另一种方法是将逻辑放在 Page_Controller
中。这使得模板在逻辑变得复杂时更易于阅读。
Page.php
public function BusinessTemplate() {
return in_array($this->ClassName, array('BusinessPage', 'BusinessSubPage'));
}
Page.ss
<% if not $BusinessTemplate %>
enter code here
<% end_if %>