2015-06-11 3 views
-1

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

  1. Я не получаю quoteId?
  2. я получаю всегда ошибка: Вызов функции члена getStoreId()

Вот мой testcode:

<?php 
#_test/duplicate.php 
require_once __DIR__.'/../app/Mage.php'; 

Mage::app(); 

/** 
* @var $quote Mage_Sales_Model_Quote 
* @var $quoteItem Mage_Sales_Model_Quote_Item 
* @var $newQuoteItem Mage_Sales_Model_Quote_Item 
* @var $cart Mage_Checkout_Model_Cart 
* @var $product Mage_Catalog_Model_Product 
*/ 
$quoteItem = Mage::getModel('sales/quote_item')->load(356); 
$cart = Mage::getSingleton('checkout/cart'); 
$storeId = Mage::app()->getStore()->getId(); 
$quote = Mage::getSingleton('checkout/session')->getQuote(); 

$product = Mage::getModel('catalog/product') 
    ->setStoreId($storeId) 
    ->load($quoteItem->getProductId()); 


echo 'quoteId: '.$quote->getId().'<br />'; 
echo 'quoteItem: '.$quoteItem->getId().'<br />'; 
echo 'storeId: '.$storeId.'<br />'; 
echo 'productId: '.$product->getId().'<br />'; 

$options = Mage::getResourceModel('sales/quote_item_option_collection'); 
$options->addItemFilter($quoteItem->getId()); 
foreach ($options as $option) { 
    $quoteItem->addOption($option); 
} 
$buyRequest = $quoteItem->getBuyRequest(); 
//var_dump($buyRequest); 


$quoteItem->setQuote($quote); 
$quoteItem->setStoreId($storeId); 
$newItem = clone $quoteItem; 

//doesn*t work: 
//Fatal error: Call to a member function getStoreId() on a non-object in \app\code\core\Mage\Sales\Model\Quote\Item\Abstract.php on line 65 
$quote->addItem($newItem); 

if ($quoteItem->getHasChildren()) { 
    foreach ($item->getChildren() as $child) { 
     $newChild = clone $child; 
     $newChild->setParentItem($newItem); 
     $quote->addItem($newChild); 
    } 
} 

редактировать: Я также попытался:

$cart->addOrderItem($newItem, 1);

Тогда я получить эту ошибку:

Fatal error: Uncaught exception 'Mage_Core_Exception' with message 'Please specify product option(s).' in \app\Mage.php on line 603

Как я могу скопировать и необходимые параметры?

ответ

1

наконец я получил его на работу:

<?php 
#_test/duplicate.php 
require_once __DIR__.'/../app/Mage.php'; 
require_once __DIR__.'/../lib/Debug/Console.php'; 

Mage::app(); 
Mage::getSingleton('core/session', array('name'=>'frontend')); 

/** 
* @var $quote Mage_Sales_Model_Quote 
* @var $quoteItem Mage_Sales_Model_Quote_Item 
* @var $newQuoteItem Mage_Sales_Model_Quote_Item 
* @var $cart Mage_Checkout_Model_Cart 
* @var $product Mage_Catalog_Model_Product 
*/ 
$quoteItem = Mage::getModel('sales/quote_item')->load(356); 
$cart = Mage::getSingleton('checkout/cart'); 
$storeId = Mage::app()->getStore()->getId(); 
$quote = Mage::getSingleton('checkout/session')->getQuote(); 

$product = Mage::getModel('catalog/product') 
    ->setStoreId($storeId) 
    ->load($quoteItem->getProductId()); 


echo 'quoteId: '.$quote->getId().'<br />'; 
echo 'quoteItem: '.$quoteItem->getId().'<br />'; 
echo 'storeId: '.$storeId.'<br />'; 
echo 'productId: '.$product->getId().'<br />'; 


$options = Mage::getResourceModel('sales/quote_item_option_collection'); 
$options->addItemFilter($quoteItem->getId()); 

$quoteItem->setQuote($quote); 
$quoteItem->setStoreId($storeId); 

foreach ($options as $option) { 
    $quoteItem->addOption($option); 
} 
$buyRequest = $quoteItem->getBuyRequest(); 

$cart->addProduct($product, $buyRequest); 

$cart->save(); 
Смежные вопросы