2011-12-15 168 views
0

客戶希望所有已售罄的產品都出現在產品列表的末尾,我正努力讓它在一分鐘內正常工作,因此存在問題。值得注意的是,系統中的所有類別都被設置爲僅爲其產品訂購使用「最佳價值」定位,並且此重新定位必須自動完成。在Magento銷售時設置產品的位置

目前,我已向「sales_convert_quote_item_to_order_item」事件添加了一個觀察者,這是將購物車項目添加到訂單本身的位置(似乎是一個明智的目標位置)。

我發現的問題顯然是,產品的可用數量存儲在產品庫存記錄中,但產品定位是針對類別本身存儲的(然後編入索引)。

我真的不想訴諸使用SQL,所以希望有人能夠提供某種方法使用的建議。

我的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; 

我承認,這是不是這樣做的一個很好的方式,因此將是相當密集它有在車的產品很多。但由於此時訂單並未創建,因此我也無法使用它。

任何指針或建議將受到感謝。

謝謝。

+1

查看庫存模型而不是報價項目。 – 2011-12-15 11:24:12

+0

報價只是爲了獲得產品。但我也會看到這條路線。 – Dan 2011-12-15 12:00:29

+0

作爲一個方面說明,getUserProducts()方法不可用,因爲我是基於報價項加載它,而不是產品本身。 – Dan 2011-12-15 12:14:56

回答

0

如果我正確地從問題的理解:

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

如果上市=類別,那麼爲什麼不ü改變呈現邏輯?簡單地擴展目錄產品清單並重寫獲取產品收集方法。

你需要達到的是所有售完產品都在列表的最後。因此,您可以使用these函數之一對負載的產品集合進行排序。