我正在与一家在 Magento EE 1.12 上运行的商店合作。有一天,我们打开商店,发现所有可配置的产品都从类别列表中消失了。我检查了加载产品的 SQL,发现与catalog_product_index_price的内部连接使它返回空。
我打开表格发现,虽然这些可配置产品的子简单产品仍在表中,但可配置产品却没有。
什么可能导致这个问题?
我正在与一家在 Magento EE 1.12 上运行的商店合作。有一天,我们打开商店,发现所有可配置的产品都从类别列表中消失了。我检查了加载产品的 SQL,发现与catalog_product_index_price的内部连接使它返回空。
我打开表格发现,虽然这些可配置产品的子简单产品仍在表中,但可配置产品却没有。
什么可能导致这个问题?
我在拆除核心索引器后找到了解决方案。我发现价格索引的工作原理是先运行股票索引器,然后再运行价格索引器。问题出在可配置产品股票索引器之一中。
该索引器将存储在 cataloginventory_stock_status_idx 中的可配置产品的 stock_status 呈现为0。然后可配置产品价格索引器进入并发现这些产品没有可用库存,因此它不会重新索引。
所以解决方法是:
在 Mage_CatalogInventory_Model_Resource_Indexer_Stock_Configurable 这一行
$adapter->getCheckSql("{$psCond} AND le.required_options = 0", 'i.stock_status', 0);
应该
$adapter->getCheckSql("{$psCond}", 'i.stock_status', 0);
值得怀疑的是,为什么 required_options=0 首先存在。对我来说意义不大
当您禁用产品并随后运行价格索引器时,会发生完全相同的事情。Magento 首先计算股票指数,填充表cataloginventory_stock_status_idx。如果产品被禁用,它将添加stock_status == 0。从那时起,这些产品将不再计算价格指数。
该文件位于 app/code/core/Mage/CatalogInventory/Model/Resource/Stock/Configurable.php 下。它根据PHP-FIG PSR0以类命名。
尽管这是一个老问题,但我会留下一个可能的解决方案来解决似乎是核心问题的问题。
问题在于可配置属性的backend_type
字段,它必须始终是 type int
,而不是varchar
或者其他。