Tampilkan baris dalam email transaksional jika metode pembayarannya

8

Saya ingin menampilkan garis hanya ketika pelanggan memilih metode pembayaran checkout wesel. Ketika seorang pelanggan memilih wesel sebagai metode pembayaran, saya ingin menampilkan <li>garis tambahan ke email transaksi.

Jika pelanggan memilih metode pembayaran lain, tambahan itu <li>harus disembunyikan.

Saya mencoba kode ini, tetapi tidak berhasil:

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

Bagaimana saya bisa mencapainya?

JGeer
sumber

Jawaban:

7

Dalam hal ini Anda dapat mengatur ini dengan handler.

Gunakan Handler:

Buat handler dan definisikan di file layout:

create a handlerdan menggunakan penangan ini membuat file phtml. Aktif local.xmldi app/design/frontend/YOUR_PAackage/YOUR_template/layoutdefine handler.

Kode file tata letak seperti:

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

Panggil penangan ini di templat email

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

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

kode file phtml:

Kemudian pada phtml filekode put sukashow extra li

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

Edit: lokasi phtml fileadalah: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

ATAU: Tanpa panggilan penangan:

panggil file blok tanpa penangan tata letak dan parameter ans untuk

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

Dalam hal ini, perlu diatur mangento areasebagai frontendpanggilan file phtml dari sini

Amit Bera
sumber
Halo Amit, di mana saya dapat menemukan file showcheckmo.phtml atau di mana saya harus membuatnya?
JGeer
diperbarui, silakan periksa
Amit Bera
Sudah mencobanya, tetapi itu tidak berhasil. Baris tidak ditampilkan di dalam surel.
JGeer
Coba letakkan beberapa konten statis di phtml. Dan CKD teks yang datang atau tidak
Amit Bera
Tidak juga dengan konten statis itu tidak berfungsi. Apa yang saya lakukan salah?
JGeer
0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'
Eetzen
sumber
Sudah mencobanya
0

Saya akan mencoba menjawab pertanyaan awal Anda - bagaimana menggunakan arahan dengan syarat. Untuk debug saya menggunakan xDebug. Dan menurut saya sangat sulit untuk men-debug email. Dalam hal ini saya tunjukkan contoh dengan struktur yang sama di bagian lain dari magento.

Pada bagian penjualan / pesanan / tampilan ada struktur yang sama. Struktur keluaran alamat ditentukan di Mage/Core/etc/config.xmldalam default/customer/address_templates/text.

Tugas kita akan menambahkan kondisi apa pun untuk menunjukkan atau tidak menunjukkan 'nama perusahaan'. Arahan seperti var , depend , jika diuraikan Varien_Filter_Templatedalam metode filter ($ value) . Dalam metode ini ada iterasi dari semua $ konstruksi (jika / depend / var) dan setiap $ konstruksi yang digunakan dalam panggilan ini:

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

Untuk setiap if / depende / var ada metode sendiri. Mari lihatpublic 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];
    }
}

Sekarang mari kita lihat metode yang dilindungi _getVariable. Saya ingin menarik perhatian Anda pada satu baris:

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

dan lihat komentar di bawah ini:

// If object calling methods or getting properties

Jadi untuk membuat kondisi $ stackVars kita harus menjadi objek dan menjadi instace Varien_Object (sebagian besar model memanjang dari Mage_Core_Model_Abstract, yang memanjang dari Varien_Object). Mari kita naik beberapa langkah di atas. Kita perlu menambahkan ke stackVars dan objek.

Dalam contoh saya di kelas Mage_Customer_Block_Address_Renderer_Default metode filter panggilan magento ($ value), yang saya sebutkan di atas.


Di sini saya memberikan solusinya. Peringatan! Solusi ini tidak terlalu bersih. Ini bertujuan untuk menunjukkan perilaku magento. Tolong lakukan semua penulisan ulang sendiri.

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

Dalam metode ini kita akan menambahkan objek pesanan ke $ data array. Menurut tugas saya, mari kita tambahkan objek pesanan ke array ini. Lakukan sebelum '$ formater-> setVariables ($ data);'

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

Setelah magento ini akan menguraikan objek ini dan memanggil metode apa pun itu. Sebagai contoh, kami menambahkan metode getPaymentOutput () baru. Masukkan fungsionalitas sederhana ke dalam kelas Order:

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

dan hanya setelah itu kami membuat perubahan dalam direktif xml dengan ini:

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