2011-08-10 17 views
22

Ben Magento biri çokMagento'da ana ürün kimliği nasıl edinilir?

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

gibi ana kimliklerini alır 1.4.2.0 biliyoruz Sorum şu: Ben ebeveyn ne olduğunu bilmiyorsanız, nasıl 'katalog/product_type_ kullanmayı biliyor musunuz Yapılandırılabilir 'vs' catalog/product_type_ gruplandırılmış 'modelinin kimliğini öğrenmek için?

+0

+1 üst kimliği almak için ... – balanv

cevap

8

Sen kullanabilirsiniz:

$product->getTypeInstance(); 

ürününüzün tipi nesnesini döndürür Hangi

Sonra senin gerçekleştirebilirsiniz:

->getParentIdsByChild() 

Verilmesi nihayet:

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

Bu nasıl işe yarayacak? $ product-> getTypeInstance() basit ürün örneğini döndürür. Hala ana ürünün ne tür olduğunu bilmiyoruz. –

0

Ürünün türünü $_product->getTypeId(); ile kontrol edebilir ve bu 'yapılandırılabilir' değerini döndürürse, yapılandırılabilir modeli alın ve eğer 'gruplandırılmış' döndürürse, gruplandırılmış modeli alın.

Bu yardımcı olur umarım.

+2

emin öyle :( basit bir ürün var ve bunun ebeveyn (gruplandırılmış veya yapılandırma) almaya getTypeId yöntemini çalışırken eğer sadece 'basit' geri dönecek ... ve yapılandırmayı veya gruplandırılmış modeli kullanmanız gerekip gerekmediğini hala bilmiyorsunuz. – veilig

+0

Üzgünüm, kesinlikle haklısınız. Bu yüzden, hem yapılandırılabilir hem de gruplandırılmış modeli kullanmanın ve sonuçları birleştirmenin daha iyi bir şey bilmiyorum. Hangisinin boş bir dizi döndürdüğünü de kontrol edip bunu görmezden gelebilirsiniz. – Simon

+0

"Yapılandırılabilir modeli nasıl alırsınız"? – ahnbizcad

27

Sadece yapabilirsiniz o bir veya diğer olması gerektiği gibi hem çağrı ve düşme geri sunuyoruz:

İşte
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

Diğerlerine bir not, kataloğunuza bağlı olarak, daha sık meydana gelirse yapılandırılabilir ürünleri önce kontrol etmek isteyebilirsiniz. – KTastrophy

+7

"Basit" yerine sabit Mage_Catalog_Model_Product_Type :: TYPE_SIMPLE kullanabilirsiniz. –

4

magento 1.7.2

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

biz blok dosyasında kullanabilirsiniz başka çözüm, magento 2, yapıştırma kodu için

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;  
     }