2016-10-04 4 views
2

Я пытаюсь изменить один из моих шаблонов так, чтобы определенный include вызывался на всех, кроме двух типах страниц.Условия SilverStripe в шаблонах

код я использую:

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

Это не работает, если заявление проходит на всех типах страниц и код в заявлении, если срабатывает.

Если я укоротить код только один тип страницы дает ожидаемые результаты на тип страницы:

<% if ClassName != BusinessPage %> 
    ... some code here 
<% end_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 %> 
Смежные вопросы