updateAction如何修改购物车控制器中的库存


How does the updateAction modify stock in the Cart Controller

我修改了我正在安装的magento中的购物车,这样当你想更改服装价格的尺寸(从小到大(时,你可以使用下拉框来完成,而不必删除物品并重新添加新的尺寸,我的方法是从购物车中删除旧尺寸,并添加新尺寸(从某种意义上说,如果没有功能,人们会怎么做(

我还编辑了购物车,这样,如果你要将产品的大小从Small更改为Large,并且你已经有了Large大小的产品,如果有足够的库存,它将合并2的数量(所以,如果你想将5 Small更改为5 Large,而你已经有3 Large,那么购物车在更新后将有8 Large(,我的方法是检查您更改的尺寸是否已经在购物车中,如果是,检查是否有足够的库存,如果是的话,然后删除您更改尺寸的物品,并编辑$cartData变量,该变量处理现有物品的数量更改,从而更改数量,这两种方法都可以

然而,我发现的问题是,如果你有一个像这样的手推车

product   | size   | qty
---------------------------------------
product 1 | Large  | 1
product 1 | Medium | 1
product 1 | Small  | 1

如果你把大的改成小的,把小的改成大的,即使你没有增加,如果你没有足够的库存,你也会出错

我已经发现,这是因为我在购物车中不存在尺寸时更改尺寸的方法,即使我从购物车中删除了商品,数量仍然没有,换句话说,如果你有一个只有1个库存的商品,你删除了它,并再次添加了相同的商品,数量为1,magento会认为你试图拥有一个数量为2的商品。

现在很明显,我交换产品尺寸的问题的解决方案是,每次我在updateAction中从购物车中删除一个项目时,强制magento更新库存,然而,即使查看CartController.php文件中的原始updateAction,我似乎也找不到magento在商品在购物车中时更新其使用的库存级别的函数。然而,我知道它必须更新一些临时库存级别,因为我注意到,即使你有一个商品的5个,数据库中的库存中也不会缺少5个

我的问题是,updateAction如何修改Cart控制器中的库存,一旦我发现它是如何操作的,我就可以强制它在updateAction的中间工作,而不是在结束时工作

注意:我知道只交换两个尺寸的同一产品似乎很愚蠢(有效地交换了他们在购物车中的位置(,但我不得不假设用户是白痴,他们会做一些愚蠢的事情,比如

updateAction不修改产品库存。产品库存通过sales_model_service_quote_submit_before事件触发的Mage_CatalogInventory_Model_Observer::subtractQuoteInventory方法减少(参见app/code/core/Mage/CatalogInventory/etc/config.xml文件(