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?

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


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'

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}}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.