Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Modul Terlaris Magento - Menjumlahkan Produk yang Dapat Dikonfigurasi Dan Menambahkannya Kembali

Terima kasih telah memposting kode sampel itu! Saya dapat menggunakannya untuk menciptakan solusi yang akan bekerja dengan baik untuk kita berdua.

Saya menemukan bahwa penjualan produk yang dapat dikonfigurasi dijumlahkan dengan benar tetapi tidak disertakan dalam hasil; produk anak mereka muncul sebagai gantinya. Solusi saya adalah memasukkan produk yang dapat dikonfigurasi, lakukan join kiri pada catalog_product_super_link tabel, dan filter apa pun yang memiliki parent_id . Berikut adalah perubahan yang perlu Anda lakukan:

Koleksi.php:

    public function addOrderedQty($from = '', $to = '', $getComplexProducts=false, $getComplexChildProducts = true, $getRemovedProducts = true)
    {
        $qtyOrderedTableName = $this->getTable('sales/order_item');
        $qtyOrderedFieldName = 'qty_ordered';

        $productIdFieldName = 'product_id';

        if (!$getComplexProducts) {
            $compositeTypeIds = Mage::getSingleton('catalog/product_type')->getCompositeTypes();
            $productTypes = $this->getConnection()->quoteInto(' AND (e.type_id NOT IN (?))', $compositeTypeIds);
        } else {
            $productTypes = '';
        }

        if ($from != '' && $to != '') {
            $dateFilter = " AND `order`.created_at BETWEEN '{$from}' AND '{$to}'";
        } else {
            $dateFilter = "";
        }

        $this->getSelect()->reset()->from(
            array('order_items' => $qtyOrderedTableName),
            array(
                'ordered_qty' => "SUM(order_items.{$qtyOrderedFieldName})",
                'order_items_name' => 'order_items.name'
            )
        );

         $_joinCondition = $this->getConnection()->quoteInto(
                'order.entity_id = order_items.order_id AND order.state<>?', Mage_Sales_Model_Order::STATE_CANCELED
         );
         $_joinCondition .= $dateFilter;
         $this->getSelect()->joinInner(
            array('order' => $this->getTable('sales/order')),
            $_joinCondition,
            array()
         );

         // Add join to get the parent id for configurables
         $this->getSelect()->joinLeft(
             array('cpsl' => $this->getTable('catalog/product_super_link')),
             'cpsl.product_id = order_items.product_id',
             'cpsl.parent_id'
         );

        if(!$getComplexChildProducts)
            $this->getSelect()->having('parent_id IS NULL');

        if($getRemovedProducts)
        {
             $this->getSelect()
                ->joinLeft(array('e' => $this->getProductEntityTableName()),
                    "e.entity_id = order_items.{$productIdFieldName} AND e.entity_type_id = {$this->getProductEntityTypeId()}{$productTypes}")
                ->group('order_items.product_id');
        }
        else
        {
            $this->getSelect()
                ->joinInner(array('e' => $this->getProductEntityTableName()),
                    "e.entity_id = order_items.{$productIdFieldName} AND e.entity_type_id = {$this->getProductEntityTypeId()}{$productTypes}")
                ->group('e.entity_id');
        }


        $this->getSelect()->having('ordered_qty > 0');

        // This line is for debug purposes, in case you'd like to see what the SQL looks like
        // $x = $this->getSelect()->__toString();

        return $this;
    }

List.php - Temukan dua baris berikut...

$bestsellers->addOrderedQty($startDate, $todayDate, true);
$bestsellers->addOrderedQty('', '', true);

... dan ubah menjadi:

$bestsellers->addOrderedQty($startDate, $todayDate, true, false, false);
$bestsellers->addOrderedQty('', '', true, false, false);

Perubahan saya menambahkan dua parameter opsional baru, yang keduanya default ke true , agar tidak merusak fungsi yang ada.

  • Kapan $getComplexChildProducts disetel ke false , semua item turunan dari produk yang dapat dikonfigurasi akan dihapus dari hasil.
  • $getRemovedProducts menentukan apakah produk yang dipesan sebelumnya (yang telah dihapus dari Magento) juga akan muncul atau tidak.

Harap perhatikan bahwa statistik laporan Anda harus diperbarui untuk mendapatkan hasil yang akurat.

Semoga ini membantu! Beri tahu saya jika Anda memiliki pertanyaan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Formulir HTML bertindak sebagai dapatkan alih-alih pos

  2. MySQL memicu sintaks 'perbarui pada kolom'

  3. SailsJS - Bagaimana cara menentukan panjang atribut string tanpa mendapatkan kesalahan saat membuat catatan?

  4. Bagaimana menghitung hasil MySQL dalam relasi has-many-through

  5. Grup Django menurut tanggal dan nilai SUM