Mysql
 sql >> база данни >  >> RDS >> Mysql

Модул за бестселъри на Magento - сумиране на конфигурируеми продукти и обратното им добавяне

Благодаря, че публикувахте този примерен код! Успях да го използвам, за да създам решение, което трябва да работи добре и за двама ни.

Открих, че продажбите на конфигурируеми продукти се сумират правилно, но не се включват в резултатите; техните дъщерни продукти се появяват вместо това. Моето решение беше да включа конфигурируеми продукти, да направя ляво съединение на catalog_product_super_link таблица и филтрирайте всичко, което има parent_id . Ето промените, които трябва да направите:

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 – Намерете следните два реда...

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

... и ги променете на:

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

Моите промени добавиха два нови незадължителни параметъра, които по подразбиране са true , за да не нарушава съществуващата функционалност.

  • Когато $getComplexChildProducts е зададено на false , всички дъщерни елементи на конфигурируемия продукт ще бъдат премахнати от резултатите.
  • $getRemovedProducts определя дали по-рано поръчаните продукти (които впоследствие са изтрити от Magento) също трябва да се показват.

Моля, обърнете внимание, че статистическите данни в отчета ви трябва да са актуални, за да получите точни резултати.

Надявам се това да помогне! Кажете ми, ако имате въпроси.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да свържете подобни тагове в XML файл

  2. MySQL Премахване на последващи прекъсвания на ред от колона

  3. При стартиране на sonar-runer хвърля изключение:Причинено от:Неизвестно състояние на базата данни:FRESH_INSTALL

  4. Eval() показва персонализирана стойност, ако е нула

  5. Mac OS Sierra virtualenv (python 2.7) pip install mysqlclient грешка