Это легко выполнимо с переписать 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()
. Это исправлено в примере кода.