Це досить легко виконати при переписуванні checkout/type_onepage
моделі.
У цьому класі перекрийте saveOrder()
метод наступним чином:
public function saveOrder()
{
$quote = $this->getQuote();
// First build an array with the items split by vendor
$sortedItems = array();
foreach ($quote->getAllItems() as $item) {
$vendor = $item->getProduct()->getVendor(); // <- whatever you need
if (! isset($sortedItems[$vendor])) {
$sortedItems[$vendor] = $item;
}
}
foreach ($sortedItems as $vendor => $items) {
// Empty quote
foreach ($quote->getAllItems() as $item) {
$quote->getItemsCollection()->removeItemByKey($item->getId());
}
foreach ($items as $item) {
$quote->addItem($item);
}
// Update totals for vendor
$quote->setTotalsCollectedFlag(false)->collectTotals();
// Delegate to parent method to place an order for each vendor
parent::saveOrder();
}
return $this;
}
Але майте на увазі, що в Magento оплата пов’язана з рахунком-фактурою, а кожен рахунок-фактура пов'язаний із замовленням.
Отже, це означає, що як тільки ви отримаєте кілька замовлень, ви також розділите платежі . Тому це можливо лише в тому випадку, якщо спосіб оплати не вимагає взаємодії з користувачем під час оплати.
ОНОВЛЕННЯ : Оригінальна відповідь, делегована parent::save()
якій повинна бути parent:saveOrder()
. Він зафіксований у прикладі коду зараз.