コードを2か所で調整する必要があるようです。最初に、コードが各製品について、顧客がそれをサブスクライブできるかどうかをチェックします。次に、コード(私が想定しているcronジョブ)で、製品の在庫変更をチェックします。
最初の例では、子商品のいずれかが在庫切れの場合にサブスクリプションを許可できます。
$allowSubscriptionForProduct = false;
if ($product->getData('type_id') == 'configurable') {
$childProductIds = Mage::getModel('catalog/product_type_configurable')
->getChildrenIds($product->getId())
foreach ($childProductIds[0] as $childProductId) {
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($childProductId);
if ($stock->getData('is_in_stock') == 1) {
$allowSubscriptionForProduct = true;
break;
}
}
}
if ($allowSubscriptionForProduct === true) {
// change a product attribute to let customers subscribe to this product.
}
注意:$ childProductIdsは奇妙な構造をしています。IDの配列が必要ですが、getChildrenIds()はその配列を別の配列でラップします。したがって、foreachループの[0]です。
2番目のインスタンスでは、子製品から構成可能な親製品に移動する必要があります。
foreach ($simpleProductThatWasOutOfStock as $outOfStockSimpleProduct) {
$stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($outOfStockSimpleProduct->getId());
if ($stock->getData('is_in_stock') == 1) {
$configurableProductIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($outOfStockSimpleProduct->getId())
foreach ($configurableProductIds as $configurableProductId) {
// use the code that schedules/sends the email notifications
}
}
}
使用している実際のコードがなければ、より正確にすることは困難です。これで少なくともあなたが正しい軌道に乗ることを願っています。
これらのエントリも役立つ場合があります。在庫状況を確認するには:
https://stackoverflow.com/a/2703800
https://stackoverflow.com/a/31612963
子製品から構成可能な親への移行:
https://stackoverflow.com/a/1706297
https://magento.stackexchange.com/a/30245