Perbedaan Antara Kutipan Penjualan dan Alamat Kutipan Penjualan

8

Saya mencari pengamat collect_totals mana yang dapat saya gunakan. Ada dua pengamat, sales_quote_collect_totals_before dan sales_quote_address_collect_totals_before .

Mereka dapat ditemukan di /app/code/core/Mage/Sales/Model/Quote.phpdan /app/code/core/Mage/Sales/Model/Quote/Address.php.

Saya bertanya-tanya apa perbedaan antara kedua file karena kedua file memiliki fungsi kumpulkan total?

pengguna1240207
sumber

Jawaban:

14

/app/code/core/Mage/Sales/Model/Quote.php

adalah kelas Penawaran untuk objek kutipan

/app/code/core/Mage/Sales/Model/Quote/Address.php

adalah kelas Alamat Kutipan untuk objek alamat kutipan

Objek kutipan biasanya berisi 2 objek alamat, tetapi dapat berisi lebih banyak jika ada beberapa alamat pengiriman.

Sehubungan dengan metode 'collecttotals': pertama-tama mari kita memahami setiap metode, dan tujuannya:

Metode dalam Mage_Sales_Model_Quote, adalah titik masuk awal untuk Totals Collectorsubsistem, dan diprakarsai oleh save cart,

(ini memungkinkan Anda untuk menyuntikkan metode kelas ke dalam perhitungan keranjang, untuk mempengaruhi hasil dari total keranjang - contoh: perhitungan diskon keranjang)

Alur kode sebagai berikut:

Mage_Checkout_Model_Cart::save()

Mage_Sales_Model_Quote::collectTotals() <--- titik masuk subsistem kolektor

Mage_Sales_Model_Quote_Address::collectTotals() <- setiap alamat yang dilampirkan pada objek kutipan disebut, melalui loop dalam kutipan, kumpulkan total objek.

Sekarang, dalam metode pengumpul data alamat, sebuah loop dilakukan, menggunakan semua sistem yang disebut 'pengumpul', memanggil setiap kelas / metode, sehingga memungkinkan total untuk pesanan disesuaikan dengan perhitungan tambahan (ingat bahwa semua total menggantung alamat objek, bukan objek kutipan sebenarnya, yang memungkinkan magento melakukan checkout ke beberapa alamat)

foreach ($this->getTotalCollector()->getCollectors() as $model) {
            $model->collect($this);
} 

Daftar 'kolektor' yang mungkin adalah:

masukkan deskripsi gambar di sini

Anda dapat menyuntikkan total kolektor Anda sendiri melalui konfigurasi modul, dan harus memiliki collectmetode sebagai titik masuk.

<sales>
   <quote>
      <totals>
         <giftpromo>
           <class>giftpromo/promo_gift</class>
           <after>discount</after>
           <before>tax,grand_total</before>
           <sort_order>12410</sort_order>
         </giftpromo>
      </totals>
    </quote>
</sales>

Sekarang, dengan mempertimbangkan semua informasi itu, dan peristiwa-peristiwa yang terjadi:

sales_quote_collect_totals_before : Mendapat dipecat sebelum objek alamat apa pun dimuat, dan total kolektor ditindaklanjuti

sales_quote_address_collect_totals_before : Mendapat tembakan di dalam objek alamat kutipan, sebelum setiap objek alamat menjalankan daftar objek kolektor potensial.

Tidak mengetahui permainan akhir Anda, saya tidak akan dapat menentukan mana yang tepat untuk Anda, namun, saya juga menyarankan mempertimbangkan jika tidak ada yang benar, dan bahwa Anda akan paling cocok dengan menambahkan kolektor baru untuk sistem total kolektor

Saya harap informasi ini membantu Anda menentukan cara yang tepat untuk memperluas fungsionalitas, dan memberikan solusi yang stabil.

ProxiBlue
sumber
Penjelasan super!
David Manners
Saya membaca baris pertama dan sudah memutuskan +1.
pspahn
@ ProxiBlue setelah membaca jawaban Anda, saya yakin Anda membantu saya untuk mengurutkan satu masalah yang terkait dengan metode collectTotals (). Jadi saya memiliki dua atribut diskon di tabel Produk saya untuk menerapkan diskon pada produk dalam penempatan pesanan. Jadi ketika kita membuat Kutipan, kita menambahkan diskon ini dan jumlah after_discount dalam tabel kutipan yang baik-baik saja. Sekarang ketika saya melakukan pemesanan saya melihat di baris $ quote-> collectTotals () -> save () nilai diskon menjadi 0 dan jumlah total menjadi harga asli (tanpa harga diskon). Bisakah Anda memberi tahu cara memperbaikinya?
apandey846