Как узнать мастер продукта простого продукта? - PullRequest
4 голосов
/ 17 мая 2010

Как я могу узнать, является ли простой продукт частью настраиваемого продукта, а затем получить основной продукт? Мне нужно это для списка товаров.

Только что узнал:

$_product->loadParentProductIds();
$parentIds = $_product->getParentProductIds();

Ответы [ 3 ]

5 голосов
/ 28 июня 2010

Допустим, у вас есть идентификатор продукта вашего простого продукта.

Чтобы получить все родительские конфигурируемые идентификаторы продуктов этого простого продукта, используйте следующий код: -

<?php
$_product = Mage::getModel('catalog/product')->load(YOUR_SIMPLE_PRODUCT_ID);
$parentIdArray = $_product->loadParentProductIds()
                 ->getData('parent_product_ids');
if(!empty($parentIdArray)) {
    // currently in the master configurable product
    print_r($parentIdArray); // this prints all the parent product IDs using your simple product.
}
?>

Полагаю, это должно помочь вам.

4 голосов
/ 24 марта 2011

Для Magento 1.4.2 и выше используйте вместо этого следующий метод:

$configurable_product_model = Mage::getModel(‘catalog/product_type_configurable’);
$parentIdArray = $configurable_product_model->getParentIdsByChild($simple_product_id);
4 голосов
/ 21 февраля 2011

После версии 1.4.2.0 методы loadParentProductIds() и getParentProductIds() устарели. Не спрашивай меня почему. Лично мне нравились эти методы. Так что я снова познакомил их с моими местными классами Магов. Вот как: Копия

app/code/core/Mage/Catalog/Model/Product.php

до

app/code/local/Mage/Catalog/Model/Product.php

и измените метод loadParentProductIds(), найденный вокруг строки 1349, на:

public function loadParentProductIds()
{
        return $this->_getResource()->getParentProductIds($this);
}

Этот фрагмент кода запросит у своего ресурса идентификаторы родительского продукта. Чтобы это работало, нам нужно переписать метод getParentProductIds() в классе ресурсов.

Итак, копия:

app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Product.php

до

app/code/local/Mage/Catalog/Model/Resource/Eav/Mysql4/Product.php

Найдите устаревший getParentProductIds() метод. Должно быть где-то в строке 535. Перезаписать его с кодом pre 1.4.2.0:

public function getParentProductIds($object){
    $childId = $object->getId();
    $groupedProductsTable = $this->getTable('catalog/product_link');
    $groupedLinkTypeId = Mage_Catalog_Model_Product_Link::LINK_TYPE_GROUPED;
    $configurableProductsTable = $this->getTable('catalog/product_super_link');

    $groupedSelect = $this->_getReadAdapter()->select()
        ->from(array('g'=>$groupedProductsTable), 'g.product_id')
        ->where("g.linked_product_id = ?", $childId)
        ->where("link_type_id = ?", $groupedLinkTypeId);

    $groupedIds = $this->_getReadAdapter()->fetchCol($groupedSelect);

    $configurableSelect = $this->_getReadAdapter()->select()
        ->from(array('c'=>$configurableProductsTable), 'c.parent_id')
        ->where("c.product_id = ?", $childId);

    $configurableIds = $this->_getReadAdapter()->fetchCol($configurableSelect);
    return array_merge($groupedIds, $configurableIds);
}

Теперь вы снова можете сделать это:

$_product->loadParentProductIds()->getData('parent_product_ids');

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...