I\'ve written many many modules before but for some reason my shipping module won\'t override an exsiting Magneto shipping method. Is that allowed? What am I missing here?
Check first that the model is being overridden at all. Try this:
var_dump(get_class(Mage::getModel("shipping/carrier_tablerate")));
If anyone else is facing this problem and came here for solution, it looks like OP have used codepool
in module file where it should be codePool
(notice the capital P).
There is a way but it is not obvious and required me to browse the shipping module source:
If you look at Mage_Shipping_Model_Config, you will discover that the code used as parameter for Mage::getModel() is taken from the store configuration. This code is NOT the standard code like 'shipping/carrier_tablerate', so it does not help overriding as usual.
Now you have to find out first what this code is. For example I wanted to override the matrixrate carrier, so I tested it like that:
$carrierConfig = Mage::getStoreConfig('carriers/matrixrate')
var_dump($carrierConfig['model']);
Yes, you can put this code anywhere on the page temporary but it is useful to have a separate file for such things that can be run from the command line (starting with Mage::app() to initialize Magento)
In my case the code was matrixrate_shipping/carrier_matrixrate so I had to change my config.xml like that:
<global>
<models>
<matrixrate_shipping>
<rewrite>
<carrier_matrixrate>my_class_name</carrier_matrixrate>
</rewrite>
</matrixrate_shipping>
</models>
instead of
<global>
<models>
<matrixrate>
<rewrite>
<carrier_matrixrate>my_class_name</carrier_matrixrate>
</rewrite>
</matrixrate>
</models>
Good Luck!
After working through this one a bit, I found that the only way to override the shipping controller was to make a duplicate of the file (and directory structure) in the local code folder. Then I could basically tweak the code.
Not sure why Magento doesn't seem to allow the standard overriding of these shipping functions, but a least there is a work around.
it's been a while but I had the same problem the last days. I wanted to override freeshipping and flatrate shipping methods and in addition to the answer of fab I had to add the following code in etc/config.xml. In my case the original values are located in app/code/core/Mage/Shipping/etc/config.xml.
<?xml version="1.0"?>
<config>
...
<default>
<carriers>
<flatrate>
<model>your_module/shipping_carrier_flatrate</model>
</flatrate>
<freeshipping>
<model>your_module/shipping_carrier_freeshipping</model>
</freeshipping>
</carriers>
</default>
</config>
The model values are examples. You have to replace them with your correct paths.