Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mô-đun bán chạy nhất của Magento - Tổng hợp các sản phẩm có thể định cấu hình và thêm chúng trở lại

Cảm ơn vì đã đăng mã mẫu đó! Tôi đã có thể sử dụng nó để tạo ra một giải pháp hoạt động tốt cho cả hai chúng tôi.

Tôi thấy rằng doanh số bán sản phẩm có thể định cấu hình đang được tổng hợp chính xác nhưng không được đưa vào kết quả; các sản phẩm con của họ xuất hiện thay thế. Giải pháp của tôi là bao gồm các sản phẩm có thể định cấu hình, thực hiện kết hợp bên trái trên catalog_product_super_link bảng và lọc ra bất kỳ thứ gì có parent_id . Dưới đây là những thay đổi bạn cần thực hiện:

Collection.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 - Tìm hai dòng sau ...

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

... và thay đổi chúng thành:

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

Các thay đổi của tôi đã thêm hai thông số tùy chọn mới, cả hai đều được mặc định thành true , để không phá vỡ chức năng hiện có.

  • Khi $getComplexChildProducts được đặt thành false , tất cả các mục con của sản phẩm có thể định cấu hình sẽ bị xóa khỏi kết quả.
  • $getRemovedProducts xác định xem các sản phẩm đã đặt hàng trước đó (đã bị xóa khỏi Magento) có xuất hiện hay không.

Xin lưu ý rằng thống kê báo cáo của bạn sẽ cần được cập nhật để có được kết quả chính xác.

Hi vọng điêu nay co ich! Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ProgrammingError:Các đối tượng SQLite được tạo trong một luồng chỉ có thể được sử dụng trong cùng một luồng đó

  2. Truy vấn MySQL để trả về các hàng bằng hoặc lớn hơn một ngày nhất định, trong đó ngày được phân tách trong các cột năm, tháng và ngày

  3. Cách tốt nhất để xử lý các vấn đề đồng thời

  4. Loại MySQL ENUM so với các bảng tham gia

  5. Tối ưu hóa truy vấn ORDER BY RAND () chậm