Я пытаюсь добавить несколько вариантов конфигурируемого продукта в корзину одновременно, и я собрал код, но в настоящее время он добавляет нужное количество продуктов, но только с использованием первого варианта.
Другими словами, если я попытаюсь добавить 2 зеленых футболки и 4 белых футболки, это добавит 6 зеленых футболок.
Вот код, который я получил:
public function indexAction () {
$post = $this->getRequest()->getPost();
$attr = array_keys($post['super_attribute']);
$cart = Mage::getSingleton('checkout/cart');
$product = Mage::getModel('catalog/product')->load($post['product']);
foreach ($post['super_attribute'][$attr[0]] as $optId){
if (abs($post['qty'][$optId]) > 0){
$options = array(
//"product"=>$post['product'],
"super_attribute"=>array(
$attr[0] => $optId
),
"qty"=>$post['qty'][$optId]
);
echo "Add To Cart:";
print_r($options);
echo "<br /><br />";
$cart->addProduct($product, $options);
}
}
$cart->save(); // save the cart
Mage::getSingleton('checkout/session')->setCartWasUpdated(true);
die("??");
$this->_redirect('checkout/cart/');
}
И из этого print_r, это подтверждает, что параметры верны:
Add To Cart:Array ( [super_attribute] => Array ( [141] => 5 ) [qty] => 2 )
Add To Cart:Array ( [super_attribute] => Array ( [141] => 4 ) [qty] => 4 )
Но в корзине я вижу 6 из первых super_attribute.
Что мне нужно сделать, чтобы «сбросить» корзину после добавления каждого элемента или что-то еще?
Спасибо!
Я наткнулся на этот вопрос, и ответы не помогли. Поэтому я публикую свою версию здесь.
$parentProduct = Mage::getModel('catalog/product')->load($parentId)
->setStoreId(Mage::app()->getStore()->getId());
foreach($postData['super_attribute'] as $simpleProdId => $simpleProdConfig){
//This cloning is important
$product = clone $parentProduct;
$cartParams = array();
$cartParams = array(
'super_attribute' => $simpleProdConfig['super_attribute'],
'qty' => $simpleProdConfig['qty'],
);
$this->_getCart()->addProduct($product, $cartParams);
}
$this->_getCart()->save();
$this->_getSession()->setCartWasUpdated(true);
Или вместо передачи родительского объекта продукта передайте его идентификатор, как это кажется, работает, хотя запрос становится медленным.
$parentProduct = Mage::getModel('catalog/product')->load($parentId)
->setStoreId(Mage::app()->getStore()->getId());
foreach($postData['super_attribute'] as $simpleProdId => $simpleProdConfig){
$cartParams = array();
$cartParams = array(
'super_attribute' => $simpleProdConfig['super_attribute'],
'qty' => $simpleProdConfig['qty'],
);
//Passing id instead of instance of the parent product here
$this->_getCart()->addProduct($parentProduct->getId(), $cartParams);
}
$this->_getCart()->save();
$this->_getSession()->setCartWasUpdated(true);
создать пользовательский модуль в etc / config.xml add
<?xml version="1.0"?>
<config>
<modules>
<Package_Mymodule>
<version>0.1.0</version>
</Package_Mymodule>
</modules>
<global>
<models>
<checkout>
<rewrite>
<cart>Package_Mymodule_Model_Checkout_Cart</cart>
</rewrite>
</checkout>
</models>
</global>
</config>
и создайте файл по следующему пути Package / Mymodule / model / Checkout / Cart.php
class Package_Mymodule_Model_Checkout_Cart extends Mage_Checkout_Model_Cart{
public function addProduct($productInfo, $requestInfo=null){
$producstChildId = $requestInfo['product_child_id'];
foreach ($producstChildId as $key => $value){
$requestInfo['qty'] = current($value);
if($requestInfo['qty']){
//It is the size of the product
$requestInfo['super_attribute'][133] = key($value);
$product = Mage::getModel('catalog/product')
->setStoreId(Mage::app()->getStore()->getId())
->load($requestInfo['product'])
->setConfiguredAttributes(array('super_attribute'=>$requestInfo['super_attribute']));
parent::addProduct($product,$requestInfo);
}
}
}
}