2016-10-04 4 views
2

Ich versuche, eine meiner Vorlagen so zu ändern, dass ein bestimmtes Include für alle außer zwei Seitentypen aufgerufen wird.SilverStripe-Bedingungen in Vorlagen

Der Code ich verwende ist:

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

Dies funktioniert nicht wie die if-Anweisung auf allen Seitentypen übergibt und der Code in der if-Anweisung ausgelöst wird.

Wenn ich den Code nur ein Seitentyp gibt es die erwarteten Ergebnisse auf der Seite Typen verkürzen:

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

Gibt es eine unerwartete Ausgabe in einer if-Anweisung mit der Verwendung von ClassName als Bedingung, die ich brauche, um sich dessen bewusst sein, würde meine Probleme erklären?

Antwort

8

Ihre if-Anweisung Logik ist nicht ganz richtig. Was Sie wollen, ist && (AND) statt || (OR) zu verwenden:

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

Hier ist eine Logiktabelle ist, die Ergebnisse von drei verschiedenen Klassennamen angezeigt werden.

$ClassName  | $CN != BusinessPage | $CN != BusinessSubPage | OR | AND | 
----------------|---------------------|------------------------|-------|-------| 
ABC    | true    | true     | true | true | 
BusinessPage | false    | true     | true | false | 
BusinessSubPage | true    | false     | true | false | 

Die OR Spalte zeigt, dass egal, was die ClassName das Ergebnis immer wahr ist. Aus diesem Grund wurde die if-Anweisung immer übergeben.

2

Eine Alternative ist, die Logik in die zu setzen. Dies erleichtert das Lesen der Vorlagen, wenn die Logik kompliziert wird.

page.php

public function BusinessTemplate() { 
    return in_array($this->ClassName, array('BusinessPage', 'BusinessSubPage')); 
} 

Page.ss

<% if not $BusinessTemplate %> 
    enter code here 
<% end_if %>