sql >> Databáze >  >> RDS >> Mysql

Modul Magento BestSeller – Shrnutí konfigurovatelných produktů a jejich opětovné přidání

Děkujeme za zveřejnění tohoto ukázkového kódu! Podařilo se mi to použít k vytvoření řešení, které by mělo fungovat dobře pro nás oba.

Zjistil jsem, že prodej konfigurovatelných produktů se sčítá správně, ale nejsou zahrnuty ve výsledcích; místo toho se objeví jejich podřízené produkty. Mým řešením bylo zahrnout konfigurovatelné produkty, provést levé spojení na catalog_product_super_link tabulku a odfiltrujte vše, co má parent_id . Zde jsou změny, které budete muset provést:

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 - Najděte následující dva řádky...

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

... a změňte je na:

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

Moje změny přidaly dva nové volitelné parametry, přičemž oba mají výchozí hodnotu true , aby nedošlo k porušení stávající funkčnosti.

  • Když $getComplexChildProducts je nastaveno na false , všechny podřízené položky konfigurovatelného produktu budou z výsledků odstraněny.
  • $getRemovedProducts určuje, zda se mají objevit i dříve objednané produkty (které byly mezitím smazány z Magenta).

Vezměte prosím na vědomí, že vaše statistiky přehledů musí být aktuální, abyste získali přesné výsledky.

Snad to pomůže! Pokud máte nějaké dotazy, dejte mi vědět.



  1. Vytvoření systému zasílání zpráv v DB (zejména MySQL)

  2. Jak aktualizovat hodnotu sloupce s aktuální hodnotou sloupce plus přírůstek v codeigniter?

  3. SQL Server 2008 až SQL Server 2005

  4. Jak volat uloženou proceduru na sqlfiddle?