Visualizza la riga nell'e-mail transazionale se il metodo di pagamento è


8

Voglio visualizzare una riga solo quando il cliente seleziona il metodo di pagamento checkout vaglia postale. Quando un cliente seleziona un vaglia come metodo di pagamento, voglio visualizzare una <li>riga aggiuntiva nell'e-mail della transazione.

Se il cliente seleziona un altro metodo di pagamento, il supplemento <li>deve essere nascosto.

Ho provato questo codice, ma non funziona:

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

Come posso raggiungerlo?

Risposte:


7

In questo caso puoi gestirlo dal gestore.

Usa gestore:

Crea gestore e definiscilo nel file di layout:

create a handlere l'utilizzo di questo gestore ha reso un file phtml. Attivo local.xmla app/design/frontend/YOUR_PAackage/YOUR_template/layoutdefinire gestore.

Codice del file di layout come:

    <?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>

Chiama questo gestore al modello di email

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

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

codice file phtml:

Quindi phtml fileinserire il codice comeshow extra li

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

Modifica: posizione di phtml fileè: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

OPPURE: senza chiamata del gestore:

chiama un file a blocchi senza gestore di layout e parametro ans per

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

In questo caso, necessità impostato mangento areacome frontendin formato phtml chiamando da qui


Ciao Amit, dove posso trovare il file showcheckmo.phtml o dove devo crearlo?
JGeer,

aggiornato, si prega di controllare
Amit Bera

Ho provato, ma non funziona. La linea non viene visualizzata all'interno dell'e-mail.
JGeer,

Prova a mettere del contenuto statico su phtml. E CKD il testo verrà o no
Amit Bera

No anche con contenuto statico non funziona. Che cosa sto facendo di sbagliato?
JGeer,

0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'

Ho provato quello, ma anche quello non ha funzionato :(
JGeer

0

Cercherò di rispondere alla tua domanda iniziale: come usare la direttiva con condizione. Per il debug uso xDebug. E secondo me è molto difficile eseguire il debug delle e-mail. In tal caso, ti mostro un esempio con la stessa struttura in un'altra parte di Magento.

Sulla vendita / ordine / vista c'è la stessa struttura. La struttura di output dell'indirizzo determinata Mage/Core/etc/config.xmlin default/customer/address_templates/text.

Il nostro compito sarà aggiungere qualsiasi condizione per mostrare o meno il "nome dell'azienda". Direttive come var , dipendono , se analizzate nel filtro delVarien_Filter_Template metodo ($ value) . In questo metodo c'è l'iterazione di tutte le $ costruzioni (if / depend / var) e di tutte le $ costruzioni usate in questa chiamata:

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

Per ogni if ​​/ depende / var esiste un metodo proprio. Guardiamopublic 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];
    }
}

Ora diamo un'occhiata al metodo protetto _getVariable. Vorrei attirare la tua attenzione su una riga:

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

e guarda il commento qui sotto:

// If object calling methods or getting properties

Quindi, per rendere le condizioni, i nostri $ stackVars dovrebbero essere un oggetto e un'istanza di Varien_Object (la maggior parte dei modelli si estende da Mage_Core_Model_Abstract, che si estende da Varien_Object). Saliamo qualche gradino sopra. Dobbiamo aggiungere a stackVars e oggetto.

Nel mio esempio nella classe Mage_Customer_Block_Address_Renderer_Default magento chiama il metodo method ($ value), che ho menzionato sopra.


Qui fornisco una soluzione. Avvertimento! Questa soluzione non è molto pulita. Ha lo scopo di mostrare il comportamento del magento. Per favore, fai tutto da solo riscrivi.

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);
}

In questo metodo aggiungeremo un oggetto ordine all'array $ data. Secondo il mio compito, aggiungiamo l'oggetto ordine a questo array. Fallo prima di '$ formater-> setVariables ($ data);'

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

Dopo questo magento analizzerà questo oggetto e chiamerà qualsiasi suo metodo. Ad esempio, aggiungiamo un nuovo metodo getPaymentOutput (). Inserisci funzionalità semplice nella classe Ordine:

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

e solo successivamente apportiamo modifiche alla direttiva xml con questo:

{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.