2011-08-10 37 views
22

我知道在Magento 1.4.2.0一个得到父母的ID,像这样如何获得magento中的父母产品ID?

list($parentId) = Mage::getModel('catalog/product_type_configurable') 
          ->getParentIdsByChild($product->getId()); 

我的问题是:如果我不知道父母是什么了,我怎么知道使用“目录/ product_type_ 配置'VS '目录/ product_type_ 分组' 的模式,以获得ID?

+0

+1粘贴代码来获取父ID ... – balanv

回答

8

您可以使用:

$product->getTypeInstance(); 

将返回你的产品的类型的对象

然后您就可以执行:

->getParentIdsByChild() 

终于到:

$product->getTypeInstance()->getParentIdsByChild($child->getId()); 
+3

这是怎么去上班? $ product-> getTypeInstance()将返回简单的产品实例。我们仍然不知道什么类型是父产品。 –

0

您可以用$_product->getTypeId();检查产品的类型,如果返回“配置”,利用可配置模型,如果返回“分组”采取分组模式。

希望这会有所帮助。

+2

不知道它:( 如果你有一个简单的产品,并试图让其父(分组或配置)的getTypeId方法只会返回'简单'...并且您仍然不知道是否需要使用配置或分组模型。 – veilig

+0

我很抱歉,你是绝对正确的。所以我不知道比使用两者都好,可配置和分组模型,然后合并结果。你也可以检查哪一个返回一个空数组并忽略这个数组。 – Simon

+0

你如何“采取可配置的模型”? – ahnbizcad

27

你可以通话双方并提供一个回退,因为它应该是一个或另一个:

if($product->getTypeId() == "simple"){ 
    $parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($product->getId()); 
    if(!$parentIds) 
     $parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId()); 
    if(isset($parentIds[0])){ 
     $parent = Mage::getModel('catalog/product')->load($parentIds[0]); 
     // do stuff here 
    } 
} 
+4

根据您的产品目录,您可能需要首先检查可配置产品,如果它们发生得更频繁,则只需向其他人提供说明。 – KTastrophy

+7

您可以使用常量Mage_Catalog_Model_Product_Type :: TYPE_SIMPLE而不是“simple”。 –

4

下面是Magento的1.7.2

$parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($mageProduct->getId()); 
1

我们可以在块文件使用另一种解决方案,Magento的2,

protected $_catalogProductTypeConfigurable; 

public function __construct(
      \Magento\Catalog\Block\Product\Context $context,  
      //for getting parent id of simple 
      \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $catalogProductTypeConfigurable, 
      array $data = [] 
     ) { 
       //for getting parent id of simple 
      $this->_catalogProductTypeConfigurable = $catalogProductTypeConfigurable; 
      parent::__construct($context, $data); 
     } 
    public function getProductData($id){ 
      $parentByChild = $this->_catalogProductTypeConfigurable->getParentIdsByChild($id); 
      if(isset($parentByChild[0])){ 
       //set id as parent product id... 
       $id = $parentByChild[0];   
      } 
      return $id;  
     }