Ответ 1
Копаясь через код, похоже, что логика шаблона реализована 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, тогда шаблон должен работать.
Я предполагаю, что это не тот ответ, который вы ищете, но я уверен, что дело.
НТН, JD