我有一个自定义导入例程,可以创建可配置的产品并将子项分配给它们。这些显示在前端没有问题,直到我手动运行股票状态重新索引。

我已经制作了重新索引前后的快照,并且有一个表发生了变化,即 cataloginventory_stock_status 哪里的 stock_status 列更改自 1 (当它确实出现时) 0 (现在没有出现)为我的可配置父级。

任何人都可以解释这种行为或知道如何解决它吗?

只是为了澄清,重新同步我的产品,它调用以下代码:

$stockStatus = Mage::getModel('cataloginventory/stock_status');
$stockStatus->assignProduct($product);
$stockStatus->saveProductStatus($product->getId(), 1);

使选项再次出现,直到下一个状态重新索引。

有帮助吗?

解决方案 2

事实证明,在导入可配置父项时,我跳过了一些将条目放入的代码 cataloginventory_stock_item 这导致了 stock_status 被设置为 0 当重新索引过程运行时。考虑到这一点,我们需要确保可配置的父级有一个项目,即:

$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('stock_id', 1);
$stockItem->setData('qty', $stockLevel);
$stockItem->setData('use_config_min_qty', 1);
$stockItem->setData('use_config_backorders', 1);
$stockItem->setData('min_sale_qty', 1);
$stockItem->setData('use_config_min_sale_qty', 1);
$stockItem->setData('use_config_max_sale_qty', 1);
$stockItem->setData('is_in_stock', ($isInStock) ? 1 : 0);
$stockItem->setData('use_config_notify_stock_qty', 1);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('manage_stock', ($this->getPropS($kcStockItem, 'STOCK_CONTROLLED') == '-1') ? 1 : 0); 
$stockItem->setData('backorders', $backorderVal);
$stockItem->setData('use_config_backorders', "0");
$stockItem->save();

其他提示

我在通过API方法导入库存状态时遇到了这个问题。我要做的就是通过重写核心模块来修补核心。 Mage_Catalog_Model_Resource_Product_Status::getProductStatus()其中存在错误加载子状态的错误。为了修复这个错误,我将此方法的 else 语句中的 $select 赋值替换为

    $select = $adapter->select()
        ->from(
        array('t1' => $attributeTable),
                    '')
        ->joinLeft(
        array('t2' => $attributeTable),
                    't1.entity_id = t2.entity_id AND t1.attribute_id = t2.attribute_id AND t2.store_id = ' . (int)$storeId,
        array('t1.entity_id')
        )
        ->columns(array('value' => $valueCheckSql))
        ->where('t1.store_id = ?', Mage_Core_Model_App::ADMIN_STORE_ID)
        ->where('t1.attribute_id = ?', $attribute->getAttributeId())
        ->where('t1.entity_id IN(?)', $productIds);

确保您通过覆盖来做到这一点 Mage_Catalog_Model_Resource_Product_Status::getProductStatus() 方法来完成此操作,这样您就不会直接修改核心。

许可以下: CC-BY-SA归因
scroll top