Scavando attraverso il codice, sembra che la logica del modello è attuato da Varien_Filter_Template
(sotto lib \ Varien non app \ codice) nella funzione filter
il quale emette un richiamo alla funzione ifDirective
se il modello corrisponde alla espressione regolare. Il ifDirective
utilizza a turno la funzione per valutare la condizione if
. quindi tokenizes la condizione in Varien_Filter_Template_Tokenizer_Variable
in una proprietà o in un metodo.
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 = '';
}
Quando la condizione è rilevata se per essere un metodo, viene eseguito tale metodo, altrimenti restituisce semplicemente il valore di stringa della variabile.
Tutto ciò significa (credo!) Che se si desidera valutare un'espressione all'interno dell'istruzione if, è necessario aggiungere un nuovo attributo cliente (ci sono estensioni disponibili per questo) che il modello può valutare. Quindi se si definisce un attributo booleano "isMemberOfGroupNameX", allora il modello dovrebbe funzionare.
Immagino che questa non sia la risposta che stai cercando, ma sono abbastanza sicuro che sia così.
HTH, JD
fonte
2011-01-25 23:59:45
Correggimi se sbaglio, ma da quello che dici, potrebbe anche creare un metodo di qualche tipo (forse un metodo di supporto?) Che potrebbe controllare anche questo, giusto? –
Potrebbe anche essere possibile creare la logica all'esterno del modello per compilare una determinata variabile cliente in fase di esecuzione. – Chris
@Joseph: sì, è possibile creare un metodo, ma penso che sarebbe necessario trovarsi sull'oggetto Cliente in modo da poter utilizzare {{if customer.isGroupMember()}} che richiede l'estensione del modello Cliente. Non è qualcosa che raccomando necessariamente per questo requisito, ma ancora un'opzione valida –