开发者

Use of "getTypeInstance()" of a Product in Magento

Can anybody please put some light on the n开发者_运维技巧eed of the method "getTypeInstance()", which can be use by any product object?

Also what are the pros & cons of using this method?


The getTypeInstance allows you to retrieve an object that describes the type of the product, where type is the internal magento type. So, you can use this method to determine if a products is a simple product, a bundled product, a configurable product, etc.

You can then use these objects to determine information about a product that's specific to it's type. For example, if you call this method on a bundled product object, you'll get an object whose class is

Mage_Bundle_Model_Product_Type

This class has a number of methods on it, which are specifically designed to deal with bundled products. For example, you have the getWeight method

public function getWeight($product = null)
{
    if ($this->getProduct($product)->getData('weight_type')) {
        return $this->getProduct($product)->getData('weight');
    } else {
        $weight = 0;

        if ($this->getProduct($product)->hasCustomOptions()) {
            $customOption = $this->getProduct($product)->getCustomOption('bundle_selection_ids');
            $selectionIds = unserialize($customOption->getValue());
            $selections = $this->getSelectionsByIds($selectionIds, $product);
            foreach ($selections->getItems() as $selection) {
                $weight += $selection->getWeight();
            }
        }
        return $weight;
    }
}

This method has specific rules for determining the weight of a bundled product.

Then, in the catalog/product Model (Mage_Catalog_Model_Product), you can see that getWeight just wraps a calls to the type's getWeight

public function getWeight()
{
    return $this->getTypeInstance(true)->getWeight($this);
}

The is a prime example of Object Oriented Programming in action.

So, end of the day? If you don't know why you'd need to use this method, you don't need to use this method.


The getTypeInstance call will return a different object, depending on what product type you chose. For instance, if you chose a bundle product, the type instance will have information about the bundled products within it, information on how to calculate the dynamic weight, etc.

There's nothing wrong with using this method, as long as it has the data you need.

Hope that helps.

Thanks, Joe

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜