答案 0 :(得分:3)
以下是Magento代码的评论:
/ ** *购买过程的临时解决方法:购买多个名义商品太危险了 *或标称和非标称物品的混合物,尽管技术上可行。 * *问题在于,目前只需点击一下即可实现名义商品和订单的顺序提交。 *在逻辑上不可能使购买过程失败。 *正确的解决方案是每次都通过客户确认逐一提交项目。 * /
实际上您可以删除以下代码:
if ($item->isNominal() && $this->hasItems() || $this->hasNominalItems()) {
Mage::throwException(Mage::helper('sales')->__('Nominal item can be purchased standalone only. To proceed please remove other items from the quote.'));
}
Magento仍处理多种名义产品,但是,您自己承担风险。
答案 1 :(得分:2)
不幸的是,这是Mage_Paypal代码中的硬编码限制。
您可以在Mage_Sales_Model_Service_Quote::submitAll()
中看到它执行的submitNominalItems()
包含:
$this->_validate();
$this->_submitRecurringPaymentProfiles();
$this->_inactivateQuote();
$this->_deleteNominalItems();
因此,它在提交名义物品后杀死了购物车。我不确定为什么会这样做,但我认为这是由于在Paypal上创建订阅的方式。
以下代码可防止将商品添加到包含Mage_Sales_Model_Quote::addItem()
中的提名的购物车:
if ($item->isNominal() && $this->hasItems() || $this->hasNominalItems()) {
Mage::throwException(Mage::helper('sales')->__('Nominal item can be purchased standalone only. To proceed please remove other items from the quote.'));
}
我正在努力为其他支付提供商使用Magento的Recurring Profiles(它的后台任务:Magento Recurring Profiles with non-Paypal payment method)并且可以同时检出名义(即订阅)和真实产品,但确实让它变得更加复杂。
如果这是一个大问题,应该可以重构Mage_Paypal代码来执行此操作,但这是一项复杂的任务,无法在一个帖子中真正回答。