SilverStripe模板语句返回false positive

时间:2016-07-26 11:03:35

标签: php silverstripe

我已经在这几个小时了。我有两种页面类型: Page extends SiteTree没有其他$db字段我有一个 保留SubPage extends Page条目$db的{​​{1}}。

这是 Page.ss 模板中的if语句:

Banner

由于某些原因,即使当前PageType中没有名为 Banner <% if $Banner %> <% include Banner %> <- include the banner .ss template <% end_if %> 字段,也会返回 true 。但是,数据库中还有一个名为 Banner 的表,似乎此表的存在会触发$ Banner。

有没有办法通过使模板清楚$ Banner引用$ db字段来修复此问题,如果没有为此pagetype声明此$ db字段,则返回false。

1 个答案:

答案 0 :(得分:1)

100%确定的方法是在SubPage的控制器中创建一个名为BannerExists的函数,然后在if中使用它。

public function BannerExists() {
    return !empty($this->Banner);
}

这是因为Silverstripe返回一个空字符串,其中找不到该字段。

或者你可以使用......

<% if not $Banner == "" %>
   <% include Banner %>
<% end_if %>

...或

<% if $Banner == "" %><% else %>
   <% include Banner %>
<% end_if %>