2013-08-02 10 views
8

Próbuję załadować proste produkty, które zostały dodane do koszyka klienta, ale po pobraniu pozycji pokazuje on konfigurację nadrzędną.Uzyskaj prosty produkt z Konfigurowalny w koszyku

$cart = Mage::getSingleton('checkout/cart'); 
$productIds = array(); 

foreach ($cart->getQuote()->getAllVisibleItems() as $item) { 
    $productIds[] = $item->getProduct()->getId(); 
} 

var_dump($productIds); 

Na przykład, zwróci ten sam konfigurowalny identyfikator po dodaniu małego, średniego i dużego do mojego koszyka. Jak mogę uzyskać poszczególne proste produkty? Próbuję pobrać wartość atrybutu ustawioną na prostym poziomie produktu.

Odpowiedz

16

Po przyjrzeniu się jak Magento renderuje elementy w koszyku na stronie checkout/koszyk, udało mi się znaleźć to w app/code/core/Mage/Checkout/Block/Cart/Item/Renderer/Configurable.php

/** 
* Get item configurable child product 
* 
* @return Mage_Catalog_Model_Product 
*/ 
public function getChildProduct() 
{ 
    if ($option = $this->getItem()->getOptionByCode('simple_product')) { 
     return $option->getProduct(); 
    } 
    return $this->getProduct(); 
} 

Tak, stosując ją do fragmentu w pytaniu, byłoby

foreach ($cart->getQuote()->getAllVisibleItems() as $item) { 
    $productId = $item->getProduct()->getId(); 
    if ($option = $item->getOptionByCode('simple_product')) { 
     $productId = $option->getProduct()->getId(); 
    } 
    $productIds[] = $productId; 
} 
+11

Dla innych: Kod jedną linię: $ _item-> getOptionByCode ('simple_product') -> getProduct() -> getId(); –

Powiązane problemy