Le modèle de courrier électronique Magento Si les déclarations ne sont pas évaluées comme vraies lorsque je les attend. Quelqu'un peut-il me dire ce qui ne va pas? Regardez le code suivant:
{{var customer.group_id}}
{{if customer.group_id}}Print true{{else}}Print false{{/if}}
{{if customer.group_id==4}}Print true{{else}}Print false{{/if}}
{{if customer.group_id=4}}Print true{{else}}Print false{{/if}}
{{if customer.group_id eq 4}}Print true{{else}}Print false{{/if}}
La sortie est
4
Print True
Print False
Print False
Print False
J'ai essayé de mettre des citations autour du 4, mais le même résultat. Comment puis-je évaluer les égalités avec le modèle de courrier électronique magento dans les déclarations?
En fouillant dans le code, il semble que le modèle logique soit implémenté par Varien_Filter_Template
(sous lib\Varien not app\code) dans la fonction filter
qui envoie un rappel à la fonction ifDirective
si le modèle correspond à la regex. ifDirective
utilise à son tour la fonction _getVariable
pour évaluer votre condition if
. _getVariable
puis marque la condition de Varien_Filter_Template_Tokenizer_Variable
dans une propriété ou une méthode.
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 = '';
}
Lorsque la condition if est détectée comme étant une méthode, elle l'exécutera, sinon elle renvoie simplement la valeur de chaîne de la variable.
Cela signifie (je pense!) Que si vous souhaitez évaluer une expression dans l'instruction if, vous devez ajouter un nouvel attribut client (il existe des extensions disponibles pour cela) que le modèle peut évaluer. Donc, si vous définissez un attribut booléen "isMemberOfGroupNameX", le modèle devrait alors fonctionner.
J'imagine que ce n'est pas la réponse que vous recherchez, mais je suis à peu près sûr que c'est le cas.
HTH, JD
J'ai résolu ce problème en utilisant la technique du «bloc».
Ce que vous faites est que vous passez la commande à un bloc puis faites votre logique à l'intérieur de ce bloc.
Bien que ma solution soit pour un problème différent, l'approche devrait fonctionner ici.
Ce que je voulais, c'était une option de paiement par chèque et un texte supplémentaire dans le courrier électronique de confirmation leur rappelant de payer. J'ai ajouté ceci dans le nouveau modèle de commande:
{{block type='core/template' area='frontend' template='paymentstatus/orderemail.phtml' order=$order}}<br />
Puis j'ai créé un fichier app/design/frontend/default/default/template/paymentstatus/orderemail.phtml
Cela a la logique «si», dans mon cas, je voulais voir si le statut de la commande était celui d’un chèque et ensuite seulement rappeler au client que sa commande nécessitait des fonds compensés.
<?php if($this->getData('order')->getStatus()=='cheque') {
echo "<p>Please note that we will require your cheque to clear before we can despatch your order.</p>"; }?>
J'ai pu plus ou moins accomplir ce droit dans le modèle en utilisant {{depend}} balises de modèle.
{{depend somevar}}
Print this if somevar evaluates to true
{{/depend}}
Vous devrez créer cette variable dans app/code/local/Mage/Sales/Model/Order.php dans des méthodes telles que sendNewOrderEmail (), etc.
Dans les blocs/classes Magento normaux, vous utiliseriez $customer->getGroupId()
pour accéder à la valeur de l'ID du groupe. L'équivalent du modèle CMS/Email est customer.getGroupId()
, pas customer.group_id
comme vous l'avez écrit.