2016-10-04 91 views
2

我正在嘗試修改其中一個模板,以便在除兩個頁面類型之外的所有頁面上都調用某個包含。模板中的SilverStripe條件

我使用的代碼是:

<% if ClassName != BusinessPage || ClassName != BusinessSubPage %> 
    ... some code here 
<% end_if %> 

的if語句傳遞的所有頁面類型和if語句代碼被觸發這是行不通的。

如果我縮短了代碼只有一個頁面類型它使頁面類型的預計業績:

<% if ClassName != BusinessPage %> 
    ... some code here 
<% end_if %> 

有一些意想不到的問題,在一個if語句中使用ClassName作爲條件,我需要意識到這將解釋我的問題?

回答

8

你的if語句邏輯不太正確。你想要的是使用&&AND),而不是||OR):

<% if $ClassName != "BusinessPage" && $ClassName != "BusinessSubPage" %> 

這裏是在三個不同的類名的結果的邏輯表。

$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語句總是通過。

2

另一種方法是將邏輯放在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 %>