0

我正在尝试从分组产品中获取相关产品。我可以这样做,但不适用于它们被禁用的产品。我尝试了一个提到设置的解决方案:设置Use Flat Catalog Product为“否”,但我仍然不能。还有其他想法吗?我尝试加载一个集合并使用像 IS_ENABLED OR DISABLED 这样的过滤器,并通过加载像这样的模型

$product = Mage::getModel('catalog/product')->load($id);
 $associatedProducts = $product->getTypeInstance(true)->getAssociatedProducts($product);

还有其他想法吗?

4

1 回答 1

2

那么让我们看看类的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 类,请告诉我,然后我将扩展此答案。

于 2013-11-01T09:13:18.037 回答