gpt4 book ai didi

magento - 为什么当最后添加的报价项目没有错误时,magento 会从销售报价中删除错误信息

转载 作者:行者123 更新时间:2023-12-02 16:49:23 26 4
gpt4 key购买 nike

我一直在查看 Magento 的代码(1.6.2 社区版),天哪,它执行得一团糟,但我不会在这里提示那个

查看这段代码:

// Delete error from item and its quote, if it was set due to qty lack
$this->_removeErrorsFromQuoteAndItem($quoteItem, Mage_CatalogInventory_Helper_Data::ERROR_QTY);

位于Mage_CatalogInventory_Model_Observer类中/app/code/core/Mage/CatalogInventory/Model/Observer.php线路:489

这对我来说产生了一个特殊的错误,尝试这个(确保在后端设置“无延期交货”):

  1. 将产品添加到购物车
  2. 将其他产品添加到购物车。
  3. 进入后台并更改第一个产品数量,以免购物车中请求的数量不够。
  4. 返 repo 物车页面。

结果
添加的第一个产品显示“请求的商品在此数量中不可用”错误,但结账方法仍然显示!继续前进,最终给出一个丑陋的 js 警报,指出“并非所有商品都符合请求的数量”。

深入挖掘,我发现似乎添加到报价(购物车)的每个报价项目(购物车项目)都会重置整个报价的错误状态。

这是故意的吗?我是否偶然发现了真正的错误?这个无用的评论是什么意思?提前致谢。

编辑:请参阅下面的答案以获取解决方法和说明。

最佳答案

我必须发布后续内容,我的核心黑客有一个不幸的副作用(另一个错误):

  1. 将一定数量的商品添加到购物车(确保有库存)。
  2. 进入管理面板并减少库存,使剩余数量不再存在。
  3. 返 repo 物车页面并刷新,您会收到预期的错误。
  4. 尝试更新购物车并将请求的数量减少到实际可用的数量,您会发现更新不起作用,并且重新显示 #3 中的错误。

因此显然这种特定的逻辑对于该场景是必要的。

实际缺陷是报价错误信息集合不区分报价项目。因此,_removeErrorsFromQuoteAndItem 函数会从购物车中删除所有与数量相关的错误,包括来自另一个报价项目的错误(仍然存在错误)。

我找到了一种不需要任何核心技巧的解决方法,将此事件观察器附加到 sales_quote_item_qty_set_after 事件。

public function reinitQuoteErrorState(Varien_Event_Observer $observer)
{
$item = $observer->getEvent()->getItem();
/** @var $item Mage_Sales_Model_Quote_Item */

$quote = $item->getQuote();
/** @var $quote Mage_Sales_Model_Quote */

// Quote not loaded, do nothing since our changes are transient
if (!$quote) return;

// Quote already has error state, nothing to do.
if ($quote->getHasError()) return;

foreach ($quote->getAllItems() as $quoteItem)
{
if ($errorItems = $quoteItem->getErrorInfos())
{
foreach ($errorItems as $errorItem)
{
if ($errorItem['code'] == Mage_CatalogInventory_Helper_Data::ERROR_QTY)
{
$quote->addErrorInfo(
'error',
'cataloginventory',
Mage_CatalogInventory_Helper_Data::ERROR_QTY,
Mage::helper('cataloginventory')->__('Not all products are available in the requested quantity')
);

return;
}
}
}
}
}

注意:具有此事件处理程序的模块必须添加到/app/etc/modules/中模块 XML 文件的标记(例如:/app/etc/modules/MyCompany_MyModule.xml )以确保在存在错误的 Mage_CatalogInventory_Model_Observer::checkQuoteItemQty 之后调用此处理程序。

真正的解决方案是修复报价错误信息系统以维护报价项目身份,但此解决方法不需要任何核心黑客攻击。

<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<MyCompany_MyModule>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_CatalogInventory />
</depends>
</MyCompany_MyModule>
</modules>
</config>

关于magento - 为什么当最后添加的报价项目没有错误时,magento 会从销售报价中删除错误信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10297217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com