在庫状況再インデックスの後にフロントエンドから消える設定可能なオプション

magento.stackexchange https://magento.stackexchange.com//questions/34569

質問

設定可能な製品を作成し、それらに子供を割り当てるカスタムインポートルーチンがあります。これらは、在庫状況再インデックスを手動で実行するまで問題なくフロントエンドに表示されます。

再インデックスの前後からスナップショットをやりました、そして、cataloginventory_stock_status列がstock_status(現されているときに表示されていない)から1(現されていない)に変更されている0のテーブル変更が1つあります。親。

誰もがこの行動を説明するか、それを解決する方法を知っていますか?

以下のコードを呼び出す私の製品を明確にするためだけに:

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

次のステータスが再インデックスされるまでオプションを再度表示させます。

役に立ちましたか?

解決 2

設定可能な親をインポートすると、Re-Indexプロセスが実行されたときにcataloginventory_stock_itemstock_statusに設定された0にエントリを作成するコードをスキップしました。それを念頭に置いて、設定可能な親にアイテムi.e:があることを確認する必要があります。

$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帰属
所属していません magento.stackexchange
scroll top