How to override Magento model classes?

8 Comments 12th AUG 2009 | Posted by Tomas Novoselic in Magento

How to override Magento model classes?

Many times we need to implement new functionality of existing Magento core classes, but we don’t want to modify core classes.
For controllers, that’s quite easy. Usually we can copy controller from core and put it in the same place in local directory, modify class and that’s it.

Of course, there are better ways to do that (make module), but I’m not going to write about that right now since it is not subject of this post.

I only mentioned that because we can’t do same thing for models even if we want to, so how to override Magento models without modifying core files?

Fortunately, that’s very easy =)
Let’s make one extension of that kind!

Extension we are going to  make will be useless, only difference between this extension and original class will be  class name var_dump =)

What we are  going to do now is to take a random model class from Magento core.
Let it be Mage_Wishlist_Model_Item located in app/code/core/Mage/Wishlist/Model/Item.php

What we want to do is to add new functionality to that class, so let’s make new module.

Call it Inchoo_Wishlist.

Create app/code/local/Inchoo/Wishlist/model/ directory and copy app/code/core/Mage/Wishlist/Model/Item.php
there.

Now,  rename class Mage_Wishlist_Model_Item to Inchoo_Wishlist_Model_Item.

Add this line:

var_dump(get_class($this)); exit();

in loadByProductWishlist method

Now, let’s create Inchoo_Wishlist.xml in app/etc/modules/
Put this code there:

< ?xml version="1.0"?>
<config>
    <modules>
        <inchoo_wishlist>
            <active>true</active>
            <codepool>local</codepool>
        </inchoo_wishlist>
    </modules>
</config>

Now, make app/code/local/Inchoo/Wishlist/etc/Config.xml file and put this code there:

< ?xml version="1.0"?>
<config>
    <modules>
        <inchoo_wishlist>
            <version>0.1</version>
        </inchoo_wishlist>
    </modules>
    <global>
       <models>
          <wishlist>
              <rewrite>
                  <item>Inchoo_Wishlist_Model_Item</item>
              </rewrite>
          </wishlist>
       </models>
    </global>
</config>

You are done! Try to add something to wishlist! =)
Play with other models as well!

Cheers ^_^

If you like what you read, please share it.

  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Yahoo! Bookmarks
  • Reddit
  • Technorati
  • Twitter
  • StumbleUpon
  • LinkedIn
  • Netvibes
  • NewsVine
  • Sphinn
  • Tumblr
  • Posterous

To post code in comments, place your code inside [code] and [/code] tags.

There are 8 comments (Add Yours +)

  • You should use instead of :)

  • // lost tags, sorry
    You should use “codePool” instead of “codepool”
    Magento is case sencitive, you know

  • @ m4e Tnx for mentioning that! I’m not sure what happened, maybe this code display plugin for wordpress. I’ll check that asap

  • Hm… it seems that I was right, wordpress plugin turns all tags to small case :(

  • Thanks for the effort.

    Seems like Branko got it covered already at ActiveCodeline, Overrider module, which shows it nicely how to do it ( http://activecodeline.com/modules/ ).

  • Please correct xml tags there is a space between opening tag and exclamation sign: “< ?xml"

  • Does anybody know how to override this magento class

    class Mage_Directory_Model_Currency extends Mage_Core_Model_Abstract
    { }

    In my config.xml file, I have made the following change:

    …..

    MyCompany_MyModule_Model_Currency

    ……

    But it is not working! I’m missing something?

    Regards,

  • Worth to mention is that if the class you want to override has a deeper catalog structure then you need to provide the whole path to the element in the config.xml file.

    For example, I had to override the password length check in

    class

    Mage_Customer_Model_Customer_Attribute_Backend_Password

    My config file:

    *snip*

    MyCompany_Customer_Model_Customer_Attribute_Backend_Password

    *snip*

Leave a Comment

Please wrap all source codes with [code][/code] tags.
Magento Design and Development | Magento SEO | iPhone Application Development Web Application Development with ZEND | WordPress Ecommerce | WordPress development
Sitemap

Inchoo - webappsolutions | 2009