0
votes

Hi i am trying to override magento admin model file

the file location is : core/Mage/Catalog/Model/Product/Type.php

i am trying to show only simple product when creating a new product but it is not working.

directory stretcher and file is given as below

local->Divum->Catalog->etc->config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Divum_Catalog>
           <version>0.1.0</version>
        </Divum_Catalog>
        <global>
            <models>
            <catalog>
                    <rewrite>
                    <product_type>Divum_Catalog_Model_Product_Type</product_type>
                </rewrite>
                </catalog>
            </models>
        </global>
    </modules>
</config>

local->Divum->Catalog->Model->Product->Type.php

class Divum_Catalog_Model_Product_Type
{
const TYPE_SIMPLE       = 'simple';
const TYPE_BUNDLE       = 'bundle';
const TYPE_CONFIGURABLE = 'configurable';
const TYPE_GROUPED      = 'grouped';
const TYPE_VIRTUAL      = 'virtual';

const DEFAULT_TYPE      = 'simple';
const DEFAULT_TYPE_MODEL    = 'catalog/product_type_simple';
const DEFAULT_PRICE_MODEL   = 'catalog/product_type_price';
static protected $_types;
static protected $_compositeTypes;
static protected $_priceModels;
static protected $_typesPriority;
public static function factory($product, $singleton = false)
{
    $types = self::getTypes();
    $typeId = $product->getTypeId();

    if (!empty($types[$typeId]['model'])) {
        $typeModelName = $types[$typeId]['model'];
    } else {
        $typeModelName = self::DEFAULT_TYPE_MODEL;
        $typeId = self::DEFAULT_TYPE;
    }

    if ($singleton === true) {
        $typeModel = Mage::getSingleton($typeModelName);
    }
    else {
        $typeModel = Mage::getModel($typeModelName);
        $typeModel->setProduct($product);
    }
    $typeModel->setConfig($types[$typeId]);
    return $typeModel;
}
public static function priceFactory($productType)
{
    if (isset(self::$_priceModels[$productType])) {
        return self::$_priceModels[$productType];
    }

    $types = self::getTypes();

    if (!empty($types[$productType]['price_model'])) {
        $priceModelName = $types[$productType]['price_model'];
    } else {
        $priceModelName = self::DEFAULT_PRICE_MODEL;
    }

    self::$_priceModels[$productType] = Mage::getModel($priceModelName);
    return self::$_priceModels[$productType];
}
static public function getOptionArray()
{
    $options = array();
    foreach(self::getTypes() as $typeId=>$type) {
         if($typeId == 'simple'):
            $options[$typeId] = Mage::helper('catalog')->__($type['label']);
        endif;
    }

    return $options;
}
static public function getAllOption()
{
    $options = self::getOptionArray();
    array_unshift($options, array('value'=>'', 'label'=>''));
    return $options;
}
static public function getAllOptions()
{
    $res = array();
    $res[] = array('value'=>'', 'label'=>'');
    foreach (self::getOptionArray() as $index => $value) {
        $res[] = array(
           'value' => $index,
           'label' => $value
        );
    }
    return $res;
}
static public function getOptions()
{
    $res = array();
    foreach (self::getOptionArray() as $index => $value) {
        $res[] = array(
           'value' => $index,
           'label' => $value
        );
    }
    return $res;
}
static public function getOptionText($optionId)
{
    $options = self::getOptionArray();
    return isset($options[$optionId]) ? $options[$optionId] : null;
}
static public function getTypes()
{
    if (is_null(self::$_types)) {
        $productTypes = Mage::getConfig()->getNode('global/catalog/product/type')->asArray();
        foreach ($productTypes as $productKey => $productConfig) {
            $moduleName = 'catalog';
            if (isset($productConfig['@']['module'])) {
                $moduleName = $productConfig['@']['module'];
            }
            $translatedLabel = Mage::helper($moduleName)->__($productConfig['label']);
            $productTypes[$productKey]['label'] = $translatedLabel;
        }
        self::$_types = $productTypes;
    }

    return self::$_types;
}
static public function getCompositeTypes()
{
    if (is_null(self::$_compositeTypes)) {
        self::$_compositeTypes = array();
        $types = self::getTypes();
        foreach ($types as $typeId=>$typeInfo) {
            if (array_key_exists('composite', $typeInfo) && $typeInfo['composite']) {
                self::$_compositeTypes[] = $typeId;
            }
        }
    }
    return self::$_compositeTypes;
}
public static function getTypesByPriority()
{
    if (is_null(self::$_typesPriority)) {
        self::$_typesPriority = array();
        $a = array();
        $b = array();

        $types = self::getTypes();
        foreach ($types as $typeId => $typeInfo) {
            $priority = isset($typeInfo['index_priority']) ? abs(intval($typeInfo['index_priority'])) : 0;
            if (!empty($typeInfo['composite'])) {
                $b[$typeId] = $priority;
            } else {
                $a[$typeId] = $priority;
            }
        }

        asort($a, SORT_NUMERIC);
        asort($b, SORT_NUMERIC);

        foreach (array_keys($a) as $typeId) {
            self::$_typesPriority[$typeId] = $types[$typeId];
        }
        foreach (array_keys($b) as $typeId) {
            self::$_typesPriority[$typeId] = $types[$typeId];
        }
    }
    return self::$_typesPriority;
}
}

When i put the same code in core file which is located in "core/Mage/Catalog/Model/Product/Type.php" it is working but it is not working in the override file.

I think i made a mistake in config file but i don't know what is the problem. please help me to solve this.

1

1 Answers

0
votes

Try this, you had wrapped it all in the modules tags.

<?xml version="1.0"?>
<config>
    <modules>
        <Divum_Catalog>
            <version>0.1.0</version>
        </Divum_Catalog>
    </modules>
    <global>
        <models>
            <catalog>
                <rewrite>
                    <product_type>Divum_Catalog_Model_Product_Type</product_type>
                </rewrite>
            </catalog>
        </models>
    </global>
</config>