那么让我们看看类的getAssociatedProducts()
方法Mage_Catalog_Model_Product_Type_Grouped
。这是其中有趣的部分:
if (!Mage::app()->getStore()->isAdmin()) {
$this->setSaleableStatus($product);
}
$collection = $this->getAssociatedProductCollection($product)
->addAttributeToSelect('*')
->addFilterByRequiredOptions()
->setPositionOrder()
->addStoreFilter($this->getStoreFilter($product))
->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)));
如您所见,Magento 将状态添加到集合过滤器。方法getStatusFilters()
返回产品状态以应用于过滤器。如果您查看此方法的主体,您会发现它基本上返回$product->getData($this->_keyStatusFitlers)
。
此方法需要返回 2 个值(2 个状态)。但事实并非如此。负责if
在集合建立之前的声明:
if (!Mage::app()->getStore()->isAdmin()) {
$this->setSaleableStatus($product);
}
此部分将仅ENABLED
在产品状态过滤器上设置状态。
如果您想从分组产品中获取禁用产品,您需要重写Mage_Catalog_Model_Product_Type_Grouped
类并删除if
语句和/或设置适当的过滤器。
如果您不知道如何重写 Magento 类,请告诉我,然后我将扩展此答案。