模板中的 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 %>