Как скопировать одно предложение (только товары в корзине) в другое предложение (только товары)


Я хочу скопировать одну цитату (только товары в корзине) в другую цитату (только товары). Только хочу to copy cart products to other new quote.

Предположим: у меня есть старая цитата, идентификатор которой равен 5, есть 4 элемента

 i have another quote which id 77, have 1 item, i want to copy  4 items of quote id  5 to 
quote id  77.

У меня есть попытка ниже блога; Программно добавлять товары в корзину и назначать гостевому пользователю

Author: Community, 2014-07-28

3 answers

Взгляните на метод merge() в mage_sales_model_quote. Я никогда не использовал его, но это должно быть что-то вроде:

$quoteA = Mage::getModel('sales/quote')->load('5');
$quoteB = Mage::getModel('sales/quote')->load('77');

$quoteB->merge($quoteA);

// Also?
$quoteB->collectTotals()->save();

Zend_Debug::dump($quoteB->getAllItems());

//редактировать - Я посмотрел, что Magento делает в модели сеанса проверки, и он также вызывает collectTotals() и save(), так что это, вероятно, также необходимо.

Посмотрите также на Сеанс mage_checkout_model_session

 7
Author: pspahn, 2014-07-29 05:45:05

Просто дополнение к этому, чтобы скопировать элементы предложения, вам нужно выполнить следующее:

foreach($quoteA->getItemsCollection() as $item) {

   $item->setId(null); //Remove the item id, so it gets added
   $quoteB->addItem($item);
}
 0
Author: Mayers, 2017-05-31 10:30:12

У меня была аналогичная проблема, я хотел создать новую цитату в сеансе пользователя и скопировать в нее предыдущие элементы, и это сработало для меня.

$newQuote = Mage::getModel('sales/quote')->merge($quote);
$newQuote->setStoreId($quote->getStoreId());
$newQuote->collectTotals()->save();
Mage::getSingleton('checkout/session')->replaceQuote($newQuote);
 0
Author: Daniel Stalica, 2019-10-26 16:04:42