Установите позицию продукта, когда он будет продаваться в Magento - PullRequest
0 голосов
/ 15 декабря 2011

Клиент хочет, чтобы все продукты, которые были распроданы, появлялись в конце списка продуктов, и я изо всех сил пытаюсь заставить его работать в данный момент, поэтому возникает вопрос.Стоит отметить, что все категории в системе настроены на использование только позиционирования «Наилучшее значение» для заказа товаров и что это изменение должно выполняться автоматически.

В настоящее время я добавил наблюдателя в «sales_convert_quote_item_to_order_item»'событие, которое является точкой, в которой элементы корзины добавляются в сам заказ (казалось разумным местом для цели).

Проблема, которую я обнаружил, заключается в том, что очевидно, что количество, доступное для продукта, хранится взапись инвентаризации продуктов, но позиционирование продуктов сохраняется в самой категории (и затем индексируется).

Я не очень хочу прибегать к использованию SQL, поэтому надеялся, что кто-то здесь сможет предложить какой-топредложение по использованию метода.

В настоящее время метод My Observer выглядит следующим образом, но он не работает, поскольку метод getUsedProducts по какой-то причине недоступен.В любом случае, вот оно:

$cart = Mage::getModel('checkout/cart')->getQuote();

    foreach($cart->getAllItems() as $key=>$item):
        print_r(get_class_methods($item));
        echo ">>> ".$item->getProductType();
        if($item->getProductType()):      
            $item = $item->load($item->getId());
            //print_r(get_class_methods($item));
            $_productCollection = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$item);
            print_r($_productCollection);
            $stockLevel = 0;
            foreach($_productCollection as $product):
                $childProductData = $product->getData();
                $stockLevel+= $childProductData['stock_item']['qty'];
            endforeach;

            echo "<br />STOCK LEVEL: $stockLevel<br />";
            if($stockLevel <= 0):
                echo "ZERO";
                //return true;
            endif;
        endif;                
        echo "<br />";
    endforeach;

Я понимаю, что это не очень хороший способ сделать это, и поэтому он будет довольно интенсивным, если в корзине будет много товаров.Но так как заказ на данный момент не создан, я также не могу его использовать.

Любые указатели или предложения будут с благодарностью приняты.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 января 2012

Вы также можете использовать логику бестселлера для перечисления продуктов. С помощью этой ссылки http://inchoo.net/ecommerce/magento/bestseller-products-in-magento/ или http://blog.magikcommerce.com/how-to-display-best-selling-products-on-magento-store-home-page/ вы узнаете, как получить бестселлер, а затем вам нужно будет позвонить по этому номеру.Блок продавца в списке товаров. Надеюсь, это поможет вам, если вы все еще ищете решение.

0 голосов
/ 15 декабря 2011

Если меня правильно поняли из задачи:

...A client wants all products that are sold out to appear at the end of the product listings...

Если списки = категории, то почему бы вам не изменить логику рендеринга?Просто расширите список продуктов каталога и переопределите метод получения продукта.

Что вам нужно сделать, так это то, что все распроданные продукты находятся в конце списка.Таким образом, вы можете сортировать загруженную коллекцию продуктов с помощью одной из этих функций.

...