Magento sort бестселлер скрыть вопрос о непроданных продуктах - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над пользовательским кодом magento, который добавляет функцию сортировки списка товаров по количеству продаж,

Я использовал этот код сайта для этого https://inchoo.net/magento/magento-products/sort-show-products-by-sold-quantity-in-magento/comment-page-1/

enter image description here

Код работает нормально, но мне нужно показывать проданные товары только тогда, когда пользователь нажал на этот фильтр

код в /app/code/local/Inchoo/Catalog/Block/Product/List/Toolbar.php

public function setCollection($collection)
    {
        $this->_collection = $collection;

        $this->_collection->setCurPage($this->getCurrentPage());

        // we need to set pagination only if passed value integer and more that 0
        $limit = (int)$this->getLimit();
        if ($limit) {
            $this->_collection->setPageSize($limit);
        }
        if ($this->getCurrentOrder()) {


               if($this->getCurrentOrder() == 'qty_ordered') {
                $this->getCollection()->getSelect()
                     ->joinLeft(
                            array('sfoi' => $collection->getResource()->getTable('sales/order_item')),
                             'e.entity_id = sfoi.product_id',
                             array('qty_ordered' => 'SUM(sfoi.qty_ordered)')
                         )
                     ->group('e.entity_id')
                     ->order('qty_ordered ' . $this->getCurrentDirection());
            }

            else{           
            $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());           
            }
        }
        return $this;
    }

можно ли фильтровать и сортировать товары, которые имеют только продажи, или мне нужно изменить какую-то другую функцию, спасибо

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете использовать функцию having(), найденную в ~/lib/Zend/Db/Select.php, чтобы возвращать только те элементы коллекции, которые имеют count(*) > 0:

$this->getCollection()->getSelect()
    ->joinLeft(
        array('sfoi' => $collection->getResource()->getTable('sales/order_item')),
         'e.entity_id = sfoi.product_id',
         array('qty_ordered' => 'SUM(sfoi.qty_ordered)')
    )
    ->group('e.entity_id')
    ->having('qty_orderd > 0')
    ->order('qty_ordered ' . $this->getCurrentDirection());

Это не проверено, и иногда требуется псевдоним таблицы, поэтому в случае сбоя попробуйте ->having('sfoi.qty_orderd > 0') или ->having('SUM(sfoi.qty_orderd) > 0') и посмотрите, работают ли они.

...