Как получить идентификатор родительского продукта в magento? - PullRequest
22 голосов
/ 10 августа 2011

Я знаю, что в Magento 1.4.2.0 можно получить идентификаторы родителей, например, так:

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

Мой вопрос: если я не знаю, кто такой родитель, как я знаю, как использовать каталог/ product_type_ конфигурируемая 'vs' каталог / product_type_ сгруппированная 'модель для получения идентификатора?

Ответы [ 5 ]

34 голосов
/ 07 августа 2012

Вы можете просто позвонить обоим и предложить запасной вариант, каким он должен быть:

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
    }
}
9 голосов
/ 21 марта 2012

Вы можете использовать:

$product->getTypeInstance();

Который вернет объект типа вашего продукта

Тогда вы можете выполнить:

->getParentIdsByChild()

Даю наконец:

$product->getTypeInstance()->getParentIdsByChild($child->getId());
7 голосов
/ 26 марта 2014

Вот еще одно решение для magento 1.7.2

$parentIds = Mage::getSingleton('catalog/product_type_configurable')->getParentIdsByChild($mageProduct->getId());
1 голос
/ 04 декабря 2015

мы можем использовать в файле блока, 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;     
        }   
0 голосов
/ 10 августа 2011

Вы можете проверить тип продукта с помощью $_product->getTypeId();, и если он возвращает «конфигурируемый», возьмите конфигурируемую модель, а если он возвращает «сгруппированный», возьмите сгруппированную модель.

Надеюсь, это поможет.

...