2016-10-04 15 views
2

テンプレートの1つを変更して、特定のインクルードが2つのページタイプ以外のすべてのタイプで呼び出されるようにしようとしています。テンプレート内のSilverStripe条件文

私が使用していたコードは次のとおりです。if文は、すべてのページ・タイプに渡し、if文でコードがトリガされるように、これは動作しません

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

私が短縮した場合、それはページタイプで、期待される結果が得られたコードにちょうど1ページタイプ:

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

は私がする必要がある場合は声明の中で、条件としてClassNameを使用して、いくつかの予期しない問題がありますそれが私の問題を説明することに注意してください?

答えて

8

if文のロジックが正しくありません。何が欲しいの代わりに||OR)の&&AND)を使用することです。ここでは

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

は、3つの異なるクラス名の結果を示す論理表です。

$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 %>