2014-10-28 4 views
0

Я создал новый тип продукта в Magento. Однако мне сложно добавить все связанные с ним продукты в таблицу sales_flat_quote_item. Я только хочу, чтобы связанные продукты были добавлены в таблицу, и только основной родительский продукт был виден в корзине.Добавить сопутствующие товары, а не корзину

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

Вот отрывок из моего кода:

class Namespace_Module_Model_Product_Type_Custom extends Mage_Catalog_Model_Product_Type_Abstract { 
........ 

    protected function _prepareProduct(Varien_Object $buyRequest, $product, $processMode) 
{ 
    $qty = $buyRequest['qty']; 
    $associatedQty = $buyRequest['associated_qty']; 

    if($qty >= 1) { 
     $result = parent::_prepareProduct($buyRequest, $product, $processMode); 
     if (is_array($result)) { 
      $product = $this->getProduct($product); 

      foreach($buyRequest['associated'] as $associated){ 
       if($associated){ 
        $subProducts[] = Mage::getModel('catalog/product')->load($associated); 
       } 
      } 

      foreach($subProducts as $subProduct){ 
       if($subProduct){ 
        $product->setCartQty($qty); 
        $product->addCustomOption('product_qty_'.$subProduct->getId(), $associatedQty[$subProduct->getId()], $subProduct); 

        $product->addCustomOption('associated_product_' . $subProduct->getId(), $associatedQty[$subProduct->getId()]); 

       } 
      } 

        $_result = $subProduct->getTypeInstance(true)->_prepareProduct(
         $buyRequest, 
         $subProduct, 
         $processMode 
        ); 

      if (!isset($_result[0])) { 
       return Mage::helper('checkout')->__('Cannot add the item to shopping cart'); 
      } 

      $_result[0]->setParentProductId($product->getId()) 
       ->addCustomOption('parent_product_id', $product->getId()); 

      $result[] = $_result[0]; 
      return $result; 

     } else { 
      return $this->getSpecifyOptionMessage(); 
     } 
    } else { 
     return $this->getQtyMessage(); 
    } 
} 

........ 
} 

Сейчас только связанный продукт «53» добавляется в качестве дочернего продукта. Мне все еще не хватает двух других. В принципе, цикл foreach($subProducts as $subProduct) будет три раза три цикла с тремя связанными продуктами. Я предполагаю, что где-то вдоль линии в Magento он использует только последний зацикленный продукт.

Любые советы или помощь с этим были бы замечательными. Заранее спасибо!

ответ

0

Получил это. Мне просто пришлось сдвинуть следующее в цикл foreach, а не за его пределами.

$_result[0]->setParentProductId($product->getId()) 
      ->addCustomOption('parent_product_id', $product->getId()); 

$result[] = $_result[0]; 
Смежные вопросы