在庫状況再インデックスの後にフロントエンドから消える設定可能なオプション
-
12-12-2019 - |
質問
設定可能な製品を作成し、それらに子供を割り当てるカスタムインポートルーチンがあります。これらは、在庫状況再インデックスを手動で実行するまで問題なくフロントエンドに表示されます。
再インデックスの前後からスナップショットをやりました、そして、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_item
がstock_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()
メソッドを上書きすることで、これを実行してください。