#if-statement #conditional #silverstripe
#оператор if #условные операторы #silverstripe
Вопрос:
Я пытаюсь изменить один из моих шаблонов так, чтобы определенное включение вызывалось для всех типов страниц, кроме двух.
Код, который я использую, является:
<% if ClassName != BusinessPage || ClassName != BusinessSubPage %>
... some code here
<% end_if %>
Это не работает, поскольку оператор if передается на всех типах страниц и запускается код в операторе if.
Если я сокращу код только до одного типа страницы, это даст ожидаемые результаты для типа страницы:
<% if ClassName != BusinessPage %>
... some code here
<% end_if %>
Есть ли какая-то неожиданная проблема с использованием ClassName
в качестве условия в операторе if, о котором мне нужно знать, что объяснило бы мои проблемы?
Ответ №1:
Ваша логика оператора if не совсем верна. То, что вы хотите, это использовать amp;amp;
( AND
) вместо ||
( OR
):
<% if $ClassName != "BusinessPage" amp;amp; $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 %>