it-swarm.com.de

E-Mail-Vorlage für Magento bei Anweisungen

Die Magento-E-Mail-Vorlage Wenn Aussagen nicht wahr sind, wenn ich sie erwarte. Kann mir jemand sagen, was los ist? Schauen Sie sich den folgenden Code an:

{{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}}

Die Ausgabe ist

4
Print True
Print False
Print False
Print False

Ich habe versucht, die 4 in Anführungszeichen zu setzen, aber das gleiche Ergebnis. Wie bewerte ich Gleichungen mit Magento-E-Mail-Vorlagen, wenn Aussagen gemacht werden

21
John

Beim Durchgraben des Codes scheint die Vorlagenlogik von Varien_Filter_Template (unter lib\Varien nicht app\code) in der filter-Funktion implementiert zu sein, die einen Rückruf an die ifDirective-Funktion ausgibt, wenn das Muster mit dem regulären Ausdruck übereinstimmt. Die ifDirective verwendet wiederum die _getVariable-Funktion, um Ihre if-Bedingung auszuwerten. _getVariable tokenisiert dann die Bedingung in Varien_Filter_Template_Tokenizer_Variable in eine Eigenschaft oder eine Methode. 

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 = '';
        }

Wenn die if-Bedingung als Methode erkannt wird, führt sie diese Methode aus. Andernfalls gibt sie einfach den Zeichenfolgenwert der Variablen zurück. 

All dies bedeutet (denke ich!), Dass Sie, wenn Sie einen Ausdruck in der if-Anweisung auswerten möchten, ein neues Kundenattribut hinzufügen müssen (hierfür sind Erweiterungen verfügbar), die die Vorlage auswerten kann. Wenn Sie also ein boolesches Attribut "isMemberOfGroupNameX" definieren, sollte die Vorlage funktionieren. 

Ich kann mir vorstellen, dass dies nicht die Antwort ist, die Sie suchen, aber ich bin mir ziemlich sicher, dass dies der Fall ist.

HTH, JD

16
Jonathan Day

Ich habe dieses Problem mit der 'Block'-Technik gelöst.

Sie übergeben den Befehl an einen Block und führen dann Ihre Logik in diesem Block aus.

Obwohl meine Lösung für ein anderes Problem ist, sollte der Ansatz hier funktionieren.

Was ich wollte, war eine Pay-by-Check-Option und einen zusätzlichen Text in der Bestätigungs-E-Mail, der sie daran erinnert, zu bezahlen. Ich habe dies in die neue Bestellvorlage eingefügt:

{{block type='core/template' area='frontend' template='paymentstatus/orderemail.phtml' order=$order}}<br />

Dann habe ich eine Datei erstellt app/design/frontend/default/default/template/paymentstatus/orderemail.phtml

Dies hat die "Wenn" -Logik, in meinem Fall wollte ich sehen, ob der Auftragsstatus der für eine Prüfung war, und den Kunden erst dann daran erinnern, dass für seine Bestellung ein freigegebenes Geld benötigt wurde.

<?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>"; }?>
31
ʍǝɥʇɐɯ

Ich konnte dieses Recht in der Vorlage mehr oder weniger mit {{depend}} Vorlagen-Tags ausführen.

{{depend somevar}}
Print this if somevar evaluates to true
{{/depend}}

Sie müssen diese Variable in app/code/local/Mage/Sales/Model/Order.php in den Methoden wie sendNewOrderEmail () usw. heraufbeschwören.

7
Greg Robbins

In normalen Magento-Blöcken/Klassen würden Sie $customer->getGroupId() verwenden, um auf den Gruppen-ID-Wert zuzugreifen. Das CMS/Email-Template-Äquivalent lautet customer.getGroupId() und nicht customer.group_id wie Sie geschrieben haben.

0
duttyman