Kalaiyarasan
Kalaiyarasan

Reputation: 13384

Cart controller override is not working in magento 1.8

I have to tried to override the cart controller in magento. But it seems to be not override in the magento 1.8. I did the following things

Added the files like

Magento/app/code/local/MyNameSpace/MyCheckout/etc/config.xml
Magento/app/code/local/MyNameSpace/MyCheckout/controllers/CartController.php
Magento/app/etc/modules/MyNameSpace_MyCheckout.xml

and the contents are

config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <MyNameSpace_Mycheckout>
            <version>0.1.0</version>
        </MyNameSpace_Mycheckout>
    </modules>
    <frontend>
        <routers>
            <MyNameSpace_Mycheckout>
                <use>standard</use>
                <args>
                    <module>MyNameSpace_Mycheckout</module>
                    <frontName>mycheckout</frontName>
                </args>
            </MyNameSpace_Mycheckout>
        </routers>
    </frontend>
    <global>
        <routers>
            <checkout>
                <rewrite>
                    <cart>
                        <to>mycheckout/cart</to>
                        <override_actions>true</override_actions>
                        <actions>
                            <add>
                                <to>mycheckout/cart/add</to>
                            </add>
                        </actions>
                    </cart>
                </rewrite>
            </checkout>
        </routers>
    </global>
</config>

CartController.php

<?php
require_once 'Mage/Checkout/controllers/CartController.php';
class MyNameSpace_Mycheckout_CartController extends Mage_Checkout_CartController
{
    /**
     * Add product to shopping cart action
     */
    public function addAction()
    {
        $cart   = $this->_getCart();
        $params = $this->getRequest()->getParams();
        try {
            if (isset($params['qty'])) {
                $filter = new Zend_Filter_LocalizedToNormalized(
                    array('locale' => Mage::app()->getLocale()->getLocaleCode())
                );
                $params['qty'] = $filter->filter($params['qty']);
            }

            $product = $this->_initProduct();
            $related = $this->getRequest()->getParam('related_product');

            /**
             * Check product availability
             */
            if (!$product) {
                $this->_goBack();
                return;
            }

            $cart->addProduct($product, $params);
            if (!empty($related)) {
                $cart->addProductsByIds(explode(',', $related));
            }

            $cart->save();

            $this->_getSession()->setCartWasUpdated(true);

            /**
             * @todo remove wishlist observer processAddToCart
             */
            Mage::dispatchEvent('checkout_cart_add_product_complete',
                array('product' => $product, 'request' => $this->getRequest(), 'response' => $this->getResponse())
            );

            if (!$this->_getSession()->getNoCartRedirect(true)) {
                if (!$cart->getQuote()->getHasError()){
                    $message = $this->__('%s was added to your shopping cart.', Mage::helper('core')->htmlEscape($product->getName()));
                    $this->_getSession()->addSuccess($message);
                }
                if ($returnUrl = $this->getRequest()->getParam('return_url')) {
                    // clear layout messages in case of external url redirect
                    if ($this->_isUrlInternal($returnUrl)) {
                        $this->_getSession()->getMessages(true);
                    }
                    $this->getResponse()->setRedirect($returnUrl);
                } elseif (!Mage::getStoreConfig('checkout/cart/redirect_to_cart')
                    && !$this->getRequest()->getParam('in_cart')
                    && $backUrl = $this->_getRefererUrl()) {

                    $this->getResponse()->setRedirect($backUrl);
                } else {
                    if (($this->getRequest()->getActionName() == 'add') && !$this->getRequest()->getParam('in_cart')) {
                        $this->_getSession()->setContinueShoppingUrl($this->_getRefererUrl());
                    }

                    if($this->getRequest()->getParam('noCheckoutYet')=="yes")
                        $this->getResponse()->setRedirect($this->_getRefererUrl());
                    else
                        $this->_redirect('checkout/cart');
                }
            }
        }
        catch (Mage_Core_Exception $e) {
            if ($this->_getSession()->getUseNotice(true)) {
                $this->_getSession()->addNotice($e->getMessage());
            } else {
                $messages = array_unique(explode("\n", $e->getMessage()));
                foreach ($messages as $message) {
                    $this->_getSession()->addError($message);
                }
            }

            $url = $this->_getSession()->getRedirectUrl(true);
            if ($url) {
                $this->getResponse()->setRedirect($url);
            } else {
                $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
            }
        }
        catch (Exception $e) {
            $this->_getSession()->addException($e, $this->__('Cannot add the item to shopping cart.'));
            $this->_goBack();
        }
    }
}

MyNameSpace_MyCheckout.xml

<?xml version="1.0"?>
<config>
    <modules>
    <MyNameSpace_Mycheckout>
            <active>true</active>
            <codePool>local</codePool>
    </MyNameSpace_Mycheckout>
    </modules>
</config>

and i found there is no file "cartController.php" in Mage/Checkout/controllers/. In magento 1.8 i could able to find only one file in that directory with the name Action.php which is having only one abstract class. Can anyone plaese explain how to override cart controller in magento 1.8?

Upvotes: 2

Views: 4303

Answers (1)

MeenakshiSundaram R
MeenakshiSundaram R

Reputation: 2837

Try this code in your config.xml file

Edit

<frontend>
    <routers>
        <mycheckout>
            <use>standard</use>
            <args>
               <module>MyNameSpace_Mycheckout</module>
               <frontName>mycheckout</frontName>
            </args>
        </mycheckout>
    </routers>
</frontend>
<global>
    <rewrite>
        <mycheckout> <!--unique tag-->
            <from><![CDATA[#^/checkout/cart/add#]]></from>
            <to>/mycheckout/cart/add</to>
        </mycheckout>
    </rewrite>
</global>

Replace with this code.

<frontend>
    <routers>
        <MyNameSpace_Mycheckout>
            <use>standard</use>
            <args>
                <module>MyNameSpace_Mycheckout</module>
                <frontName>mycheckout</frontName>
            </args>
        </MyNameSpace_Mycheckout>
    </routers>
</frontend>
<global>
    <routers>
        <checkout>
            <rewrite>
                <cart>
                    <to>mycheckout/cart</to>
                    <override_actions>true</override_actions>
                    <actions>
                        <add>
                            <to>mycheckout/cart/add</to>
                        </add>
                    </actions>
                </cart>
            </rewrite>
        </checkout>
    </routers>
</global>

Upvotes: 1

Related Questions