2011-08-10 32 views
22

sé que en Magento 1.4.2.0 se obtiene del ID de padre al igual que¿Cómo obtener el ID de producto principal en magento?

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

Mi pregunta es: si no sé lo que el padre es, ¿cómo sé usar el 'Catálogo/product_type_ configurable 'vs' catalog/product_type_ ¿modelo agrupado 'para obtener la identificación?

+0

+1 para pegar código para obtener ID de padre ... – balanv

Respuesta

8

Es posible utilizar:

$product->getTypeInstance(); 

que devolverá el objeto de texto de su producto

continuación, puede realizar su:

->getParentIdsByChild() 

Dando por último:

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

¿Cómo va a funcionar esto? $ product-> getTypeInstance() devolverá una instancia simple del producto. Todavía no sabemos qué tipo es el producto principal. –

0

Puede verificar el tipo de producto con $_product->getTypeId(); y si esto devuelve 'configurable', tome el modelo configurable y si devuelve 'agrupado', tome el modelo agrupado.

Espero que esto ayude.

+2

no estoy seguro que lo hace :( si usted tiene un producto simple y tratando de conseguir su matriz (agrupados o Ajuste) el método getTypeId solo devolverá 'simple' ... y aún no sabe si necesita usar la configuración o el modelo agrupado. – veilig

+0

Lo siento, tienes toda la razón. Así que no sé nada mejor que usar ambos, el modelo configurable y agrupado y luego fusionar los resultados. También puede verificar cuál devuelve una matriz vacía e ignorar esta. – Simon

+0

¿cómo se puede "tomar el modelo configurable"? – ahnbizcad

27

Puedes simplemente llamar a ambos y ofrecer un retroceso, ya que debe ser una o la otra:

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

Solo una nota para los demás, dependiendo de su catálogo, es posible que desee comprobar los productos configurables primero si se producen con mayor frecuencia. – KTastrophy

+7

Puede usar la constante Mage_Catalog_Model_Product_Type :: TYPE_SIMPLE en lugar de "simple". –

4

Aquí hay otra solución para Magento 1.7.2

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

podemos utilizar en el archivo de bloque, 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;  
     } 
Cuestiones relacionadas