sql >> Database teknologi >  >> RDS >> Mysql

Magento BestSeller-modul - summering af konfigurerbare produkter og tilføjelse af dem igen

Tak, fordi du postede den eksempelkode! Jeg var i stand til at bruge det til at skabe en løsning, som skulle fungere godt for os begge.

Jeg fandt ud af, at det konfigurerbare produktsalg summeres korrekt, men at det ikke er inkluderet i resultaterne; deres børneprodukter vises i stedet. Min løsning var at inkludere konfigurerbare produkter, lave en venstre join på catalog_product_super_link tabel, og filtrer alt fra, der har et parent_id . Her er de ændringer, du skal foretage:

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 - Find de følgende to linjer...

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

... og ændre dem til:

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

Mine ændringer tilføjede to nye valgfrie parametre, som begge er standard til true , for ikke at bryde eksisterende funktionalitet.

  • Når $getComplexChildProducts er indstillet til false , vil alle underordnede elementer af det konfigurerbare produkt blive fjernet fra resultaterne.
  • $getRemovedProducts bestemmer, om tidligere bestilte produkter (som siden er blevet slettet fra Magento) også skal vises.

Bemærk venligst, at din rapportstatistik skal være opdateret for at få nøjagtige resultater.

Håber dette hjælper! Sig til, hvis du har spørgsmål.



  1. Sammensat indeks for en relationstabel

  2. BESTIL EFTER alfabet først og derefter efter nummer

  3. Kan Django-modeller bruge MySQL-funktioner?

  4. Oracle XE forespørgselslog