Zeile in Transaktions-E-Mail anzeigen, wenn die Zahlungsmethode ist

8

Ich möchte eine Zeile nur anzeigen, wenn der Kunde die Zahlungsanweisung für die Zahlungsmethode "Kasse" auswählt. Wenn ein Kunde eine Zahlungsanweisung als Zahlungsmethode auswählt, möchte ich <li>der Transaktions-E-Mail eine zusätzliche Zeile anzeigen .

Wenn der Kunde eine andere Zahlungsmethode auswählt, sollte die zusätzliche <li>ausgeblendet werden.

Ich habe diesen Code ausprobiert, aber das funktioniert nicht:

{{depend order.getPayment().getMethod() == "checkmo"}}
    <li>payment check</li>
{{/depend}}

Wie kann ich das erreichen?

JGeer
quelle

Antworten:

7

In diesem Fall können Sie dies per Handler verwalten.

Handler verwenden:

Erstellen Sie einen Handler und definieren Sie ihn in der Layoutdatei:

create a handlerund mit diesem Handler wurde eine HTML-Datei gerendert. Ein local.xmlbei app/design/frontend/YOUR_PAackage/YOUR_template/layoutHandler definieren.

Code der Layoutdatei wie:

    <?xml version="1.0"?>
    <layout version="0.1.0">
<!-- add new handler -->
        <amit_customer_addhan>
            <block type="core/template" name="addNewLi" template="sales/showcheckmo.phtml" />
        </amit_customer_addhan>
    </layout>

Rufen Sie diesen Handler unter der E-Mail-Vorlage auf

Dann on email html call this handler(locale/YourLANG/template/email/)

{{layout handle="amit_customer_addhan" order=$order}}

Phtml-Dateicode:

Dann phtml filesetzen Sie den Code gerne einshow extra li

  <?php if($this->getOrder()->getPayment()->getMethodInstance()->getCode()=='checkmo'):?>
      <li>payment check</li>
     <?php endif;?>

Bearbeiten: Ort von phtml fileist: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

ODER: Ohne Anruf des Handlers:

Rufen Sie eine Blockdatei ohne Layout-Handler und ans-Parameter für auf

 {{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}

In diesem Fall müssen festlegen , mangento areawie frontendals phtml Datei von hier aufrufen

Amit Bera
quelle
Hallo Amit, wo finde ich die Datei showcheckmo.phtml oder wo muss ich sie erstellen?
JGeer
aktualisiert, bitte überprüfen
Amit Bera
Versuchte es, aber das funktioniert nicht. Die Zeile wird in der E-Mail nicht angezeigt.
JGeer
Versuchen Sie, statischen Inhalt auf HTML zu setzen. Und CKD der Text kommt oder nicht
Amit Bera
Nein, auch bei statischen Inhalten funktioniert es nicht. Was mache ich falsch?
JGeer
0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'
eetzen
quelle
Versuchte das, aber das hat auch nicht funktioniert :(
JGeer
0

Ich werde versuchen, Ihre erste Frage zu beantworten - wie man eine Direktive mit Bedingung verwendet. Zum Debuggen benutze ich xDebug. Und meiner Meinung nach ist es sehr schwierig, E-Mails zu debuggen. In diesem Fall zeige ich Ihnen ein Beispiel mit derselben Struktur in einem anderen Teil von Magento.

Bei Verkauf / Bestellung / Ansicht gibt es die gleiche Struktur. Die Adressenausgabestruktur bestimmt in Mage/Core/etc/config.xmlin default/customer/address_templates/text.

Unsere Aufgabe wird es sein, eine Bedingung hinzuzufügen, um den 'Firmennamen' anzuzeigen oder nicht anzuzeigen. Richtlinien wie var , abhängen , wenn Parse in Varien_Filter_TemplateMethode Filter ($ value) . Bei dieser Methode werden alle $ -Konstruktionen (if / abhängige / var) und jede in diesem Aufruf verwendete $ -Konstruktion iteriert:

$replacedValue = call_user_func($callback, $construction);

Für jedes if / depende / var gibt es eine eigene Methode. Schauen wir uns das anpublic function ifDirective($construction)

public function ifDirective($construction)
{
    if (count($this->_templateVars) == 0) {
        return $construction[0];
    }

    if($this->_getVariable($construction[1], '') == '') {
        if (isset($construction[3]) && isset($construction[4])) {
            return $construction[4];
        }
        return '';
    } else {
        return $construction[2];
    }
}

Schauen wir uns nun die geschützte Methode _getVariable an. Ich möchte Ihre Aufmerksamkeit auf eine Reihe lenken:

} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {

und schauen Sie sich den Kommentar unten an:

// If object calling methods or getting properties

Um eine Bedingung zu stellen, sollten unsere $ stackVars ein Objekt und ein Instace von Varien_Object sein (die meisten Modelle erstrecken sich von Mage_Core_Model_Abstract, das sich von Varien_Object erstreckt). Lass uns ein paar Schritte nach oben klettern. Wir müssen stackVars und object hinzufügen.

In meinem Beispiel in der Klasse Mage_Customer_Block_Address_Renderer_Default ruft magento den oben erwähnten Methodenfilter ($ value) auf.


Hier biete ich eine Lösung. Warnung! Diese Lösung ist nicht sehr sauber. Es ist beabsichtigt, magento Verhalten zu zeigen. Bitte schreiben Sie alles neu.

public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
{

    //parsing $data array

    $formater->setVariables($data);

    $format = !is_null($format) ? $format : $this->getFormat($address);

    return $formater->filter($format);
}

Bei dieser Methode fügen wir dem $ data-Array ein Auftragsobjekt hinzu. Entsprechend meiner Aufgabe können wir diesem Array ein Bestellobjekt hinzufügen. Tun Sie es vor '$ formater-> setVariables ($ data);'

$data['order_object'] = $address->getOrder();

Danach analysiert Magento dieses Objekt und ruft eine beliebige Methode auf. Zum Beispiel fügen wir die neue Methode getPaymentOutput () hinzu. Fügen Sie der Order-Klasse einfache Funktionen hinzu:

public function isPrinted()
{
    if ($this->getPayment()->getMethod() == 'checkmo') {
        return true;
    } else {
        return false;
    }
}

und erst danach nehmen wir Änderungen an der XML-Direktive vor:

{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}
zhartaunik
quelle