Reputation: 13384
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
Reputation: 2837
Try this code in your config.xml file
<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