听起来您需要在两个地方调整代码。首先,您的代码在哪里检查每个产品是否允许客户订阅。其次,您的代码(我承担的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]。
在第二种情况下,您需要从子产品转到父可配置产品。
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