Копаясь по коду, похоже, что логика шаблона реализована с помощью Varien_Filter_Template
(в lib \ Varien not app \ code) в функции filter
, которая выдает обратный вызов функции ifDirective
, если шаблон соответствуетрегулярное выражениеВ свою очередь ifDirective
использует функцию _getVariable
для оценки вашего состояния if
._getVariable
затем токенизирует условие в Varien_Filter_Template_Tokenizer_Variable
либо в свойство, либо в метод.
if($this->isWhiteSpace()) {
// Ignore white spaces
continue;
} else if($this->char()!='.' && $this->char()!='(') {
// Property or method name
$parameterName .= $this->char();
} else if($this->char()=='(') {
// Method declaration
$methodArgs = $this->getMethodArgs();
$actions[] = array('type'=>'method',
'name'=>$parameterName,
'args'=>$methodArgs);
$parameterName = '';
} else if($parameterName!='') {
// Property or variable declaration
if($variableSet) {
$actions[] = array('type'=>'property',
'name'=>$parameterName);
} else {
$variableSet = true;
$actions[] = array('type'=>'variable',
'name'=>$parameterName);
}
$parameterName = '';
}
Когда условие if определяется как метод, он выполняет этот метод, в противном случае он просто возвращает строковое значение переменной.
Все это означает (я думаю!), Что если вы хотите оценить выражение внутри оператора if, вам нужно добавить новый атрибут клиента (для этого есть расширения), который может оценить шаблон.Так что если вы определяете логический атрибут «isMemberOfGroupNameX», то шаблон должен работать.
Я думаю, это не тот ответ, который вы ищете, но я вполне уверен, что это так.
HTH, JD