2013-03-01 22 views
5

Tôi đang tạo một tiện ích mở rộng Magento. Trong đó tôi muốn cập nhật số lượng mặt hàng trong giỏ hàng theo chương trình. Tôi đang sử dụng mã sau để hiển thị các mục trong giỏ hàng.Magento: Cập nhật số lượng giỏ hàng theo chương trình

$quote = Mage::getSingleton('checkout/session')->getQuote(); 
$cartItems = $quote->getAllVisibleItems(); 
foreach ($cartItems as $item) { 
    //Do something 
} 

Điều tôi muốn là cập nhật số lượng trên giỏ hàng cho một sản phẩm cụ thể. Tôi biết nó có thể được thực hiện như thế này

$pid=15; 
$quote = Mage::getSingleton('checkout/session')->getQuote(); 
$cartItems = $quote->getAllVisibleItems(); 
foreach ($cartItems as $item) { 
if($pid==$item->getId()) 
$item->setQty($qty); 
} 

Nhưng tôi không thích phương pháp này vì nó sẽ đi qua từng sản phẩm để cập nhật số lượng một kỳ quan product.I duy nhất nếu có một cách để cập nhật số lượng trong một dòng i: e mà không sử dụng cho vòng lặp.

+0

bạn đang sử dụng sự kiện nào? –

+0

kiểm tra điều này: http://www.onlinecode.org/magento-update-cart-quantity/ –

Trả lời

12

Bạn có product_id, không phải item_id phải không?

Nếu trường hợp đó không thể lấy id sản phẩm mà không thực hiện toàn bộ các mục.

Nhìn vào Mage_Sales_Model_Quote::getItemByProduct($product); bạn sẽ thấy nó thực hiện toàn bộ danh mục.

Về cơ bản, tôi sẽ làm điều đó như thế này:

//get Product 
$product = Mage::getModel('catalog/product')->load($pid); 
//get Item 
$item = $quote->getItemByProduct($product); 

$quote->getCart()->updateItem(array($item->getId()=>array('qty'=>$qty))); 
$quote->getCart()->save(); 

Bạn nên tối ưu hóa này với một số thủ thuật nhanh chóng:

$quote->hasProductId($pid) to check if product is in the cart 

($qty!=$item->getQty()) 

để kiểm tra xem số lượng không phải là đã tốt ...

Xin lưu ý rằng đó là mã chưa được kiểm tra và một số loại phản xạ để giúp bạn tìm ra giải pháp, tôi đã không thực hiện công việc cho bạn.

Trân trọng,

+0

Nếu tôi có id mục thì tôi có thể làm như thế nào? –

+0

Nếu bạn có item_id loại bỏ 2 dòng đầu tiên, và thay thế nó bằng $ item = Mage :: getModel ('sales/quote_item') -> load ($ item_id); và $ pid = $ item-> getProductId(); – dagfr

+1

tôi đã phải sửa đổi như thế này để làm cho nó hoạt động: $ quote-> updateItem ($ itemId, mảng ('qty' => $ qty)); – Mark1inLA

2

Tôi chắc chắn nó sẽ hoạt động. Thử cái này. Đó là tiết kiệm thời gian của tôi.

public function updateCartAction(){ 
    $item_id = $this->getRequest()->getParam('item_id'); 
    $qty = $this->getRequest()->getParam('qty'); 

    $quote = Mage::getSingleton('checkout/session')->getQuote(); 
    $quote->updateItem($item_id, array('qty' => $qty)); 
    $quote->save(); 
    echo "Sssssss"; 
}