de excavación a través del código, parece que la lógica de la plantilla es implementado por Varien_Filter_Template
(en lib \ Varien no aplicación \ code) en la función filter
que emite una devolución de llamada a la función ifDirective
si el patrón coincide con la expresión regular. El ifDirective
a su vez usa la función para evaluar su condición if
. a continuación, tokenizes la condición en Varien_Filter_Template_Tokenizer_Variable
en una propiedad o un método.
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 = '';
}
Cuando se detecta la condición if ser un método, se ejecutará ese método, de lo contrario, simplemente devuelve el valor de cadena de la variable.
Todo lo cual significa (¡creo!) Que si desea evaluar una expresión dentro de la declaración if, necesita agregar un nuevo atributo de cliente (hay extensiones disponibles para esto) que la plantilla puede evaluar. Entonces, si define un atributo booleano "isMemberOfGroupNameX", entonces la plantilla debería funcionar.
Imagino que esta no es la respuesta que está buscando, pero estoy bastante seguro de que ese es el caso.
HTH, JD
Corrígeme si me equivoco, pero por lo que dices, también podría crear un método de algún tipo (¿tal vez un método de ayuda?) Que también podría verificar esto, ¿no? –
También es posible que pueda compilar la lógica fuera de la plantilla para rellenar una determinada variable de cliente en el tiempo de ejecución. – Chris
@Joseph: sí, podría crear un método, pero creo que debería estar en el objeto Cliente para que pueda usar {{si customer.isGroupMember()}}, que le exige ampliar el modelo de Cliente. No es algo que recomiendo necesariamente para este requisito, pero sigue siendo una opción válida –