Magento Ajax Cart

0

I'm having a problem in magento .. with the ajax cart .. when I add or remove a product in the cart .. the product is added and also deleted .. however .. it does not appear when I add .. and neither add it when deleting ... only with reload of the page .. but it does not appear any error in the console .. nor in the log files .. apparently it is all right .. the only thing happens that it returns successfully .. but it does not display the product in the cart .. nothing .. only when I do reload on page ... nor exclude when this is the case.

Can someone give me a light?

when remove.

{message: "Item was removed.", r: "success"}
message
:
"Item was removed."
r
:
"success"

When I add

{product_name: "Camiseta Fitness Don't Stop At Good Ref: 10094",…}
message
:
"Camiseta Fitness Don't Stop At Good Ref: 10094 was added into cart."
product_name
:
"Camiseta Fitness Don't Stop At Good Ref: 10094"
r
:
"success"
    
asked by anonymous 22.06.2017 / 07:42

1 answer

1

I use this module to add items to my cart

Download jQuery Here

Save with the name jquery.js in magento / js / jquery

Create a file called noconflict.js in / magento / js / jquery and put this in: jQuery.noConflict (); and save the file

Now let's create our module

Create the respective magento / app / code / local / {yourcompany} / Ajax folders Within them, create two more folders called etc and controllers

In etc create the file, remember to replace your company field with config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Suaempresa_Ajax>
            <version>0.1.0</version>
        </Suaempresa_Ajax>
    </modules>
    <frontend>
        <routers>
            <ajax>
                <use>standard</use>
                <args>
                    <module>Suaempresa_Ajax</module>
                    <frontName>ajax</frontName>
                </args>
            </ajax>
        </routers>
        <layout>
            <updates>
                <ajax>
                    <file>ajax.xml</file>
                </ajax>
            </updates>
        </layout>
    </frontend>   
    <global>
        <resources>
            <ajax_setup>
                <setup>
                    <module>Suaempresa_Ajax</module>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </ajax_setup>
            <ajax_write>
                <connection>
                    <use>core_write</use>
                </connection>
            </ajax_write>
            <ajax_read>
                <connection>
                    <use>core_read</use>
                </connection>
            </ajax_read>
        </resources>
    </global>
    <global>
        <rewrite>
            <ajax_cart> <!--This can be any unique id -->
                <from><![CDATA[#^/checkout/cart/#]]></from>  <!-- the URL which u want to override-->
                <to>/ajax/index/</to>  <!-- destination url -->
            </ajax_cart>
        </rewrite>
    </global>
</config>

Within controllers create IndexController.php

<?php

require_once 'Mage/Checkout/controllers/CartController.php';
class Floresonline_Ajax_IndexController extends Mage_Checkout_CartController {

public function addAction()
    {
        $cart   = $this->_getCart();
        $params = $this->getRequest()->getParams();
        if($params['isAjax'] == 1){
            $response = array();
            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) {
                    $response['status'] = 'ERROR';
                    $response['message'] = $this->__('Unable to find Product ID');
                }

                $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()));
                        $response['status'] = 'O item foi adicionado com sucesso';
                        $response['message'] = $message;
                    }
                }
            } catch (Mage_Core_Exception $e) {
            if ($this->_getSession()->getUseNotice(true)) {
                $this->_getSession()->addNotice(Mage::helper('core')->escapeHtml($e->getMessage()));
            } else {
                $messages = array_unique(explode("\n", $e->getMessage()));
                foreach ($messages as $message) {
                    $this->_getSession()->addError(Mage::helper('core')->escapeHtml($message));
                }
            }

            $url = $this->_getSession()->getRedirectUrl(true);
            if ($url) {
                $this->getResponse()->setRedirect($url);
            } else {
                $this->_redirectReferer(Mage::helper('checkout/cart')->getCartUrl());
            }
            } catch (Exception $e) {
                $response['status'] = 'ERROR';
                $response['message'] = $this->__('Cannot add the item to shopping cart.');
                Mage::logException($e);
            }
            $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
            return;
        }else{
            return parent::addAction();
        }
    }

    public function optionsAction(){
        $productId = $this->getRequest()->getParam('product_id');
        // Prepare helper and params
        $viewHelper = Mage::helper('catalog/product_view');

        $params = new Varien_Object();
        $params->setCategoryId(false);
        $params->setSpecifyOptions(false);

        // Render page
        try {
            $viewHelper->prepareAndRender($productId, $this, $params);
        } catch (Exception $e) {
            if ($e->getCode() == $viewHelper->ERR_NO_PRODUCT_LOADED) {
                if (isset($_GET['store'])  && !$this->getResponse()->isRedirect()) {
                    $this->_redirect('');
                } elseif (!$this->getResponse()->isRedirect()) {
                    $this->_forward('noRoute');
                }
            } else {
                Mage::logException($e);
                $this->_forward('noRoute');
            }
        }
    }

    protected function _getWishlist($wishlistId = null)
    {
        $wishlist = Mage::registry('wishlist');
        if ($wishlist) {
            return $wishlist;
        }
        try {
            if (!$wishlistId) {
                $wishlistId = $this->getRequest()->getParam('wishlist_id');
            }
            $customerId = Mage::getSingleton('customer/session')->getCustomerId();
            $wishlist = Mage::getModel('wishlist/wishlist');

            if ($wishlistId) {
                $wishlist->load($wishlistId);
            } else {
                $wishlist->loadByCustomer($customerId, true);
            }

            if (!$wishlist->getId() || $wishlist->getCustomerId() != $customerId) {
                $wishlist = null;
                Mage::throwException(
                    Mage::helper('wishlist')->__("Requested wishlist doesn't exist")
                );
            }

            Mage::register('wishlist', $wishlist);
        } catch (Mage_Core_Exception $e) {
            Mage::getSingleton('wishlist/session')->addError($e->getMessage());
        } catch (Exception $e) {
            Mage::getSingleton('wishlist/session')->addException($e,
            Mage::helper('wishlist')->__('Cannot create wishlist.')
            );
            return false;
        }

        return $wishlist;
    }
    public function addwishAction()
    {

        $response = array();
        if (!Mage::getStoreConfigFlag('wishlist/general/active')) {
            $response['status'] = 'ERROR';
            $response['message'] = $this->__('Wishlist Has Been Disabled By Admin');
        }
        if(!Mage::getSingleton('customer/session')->isLoggedIn()){
            $response['status'] = 'ERROR';
            $response['message'] = $this->__('Please Login First');
        }

        if(empty($response)){
            $session = Mage::getSingleton('customer/session');
            $wishlist = $this->_getWishlist();
            if (!$wishlist) {
                $response['status'] = 'ERROR';
                $response['message'] = $this->__('Unable to Create Wishlist');
            }else{

                $productId = (int) $this->getRequest()->getParam('product');
                if (!$productId) {
                    $response['status'] = 'ERROR';
                    $response['message'] = $this->__('Product Not Found');
                }else{

                    $product = Mage::getModel('catalog/product')->load($productId);
                    if (!$product->getId() || !$product->isVisibleInCatalog()) {
                        $response['status'] = 'ERROR';
                        $response['message'] = $this->__('Cannot specify product.');
                    }else{

                        try {
                            $requestParams = $this->getRequest()->getParams();
                            if ($session->getBeforeWishlistRequest()) {
                                $requestParams = $session->getBeforeWishlistRequest();
                                $session->unsBeforeWishlistRequest();
                            }
                            $buyRequest = new Varien_Object($requestParams);

                            $result = $wishlist->addNewItem($product, $buyRequest);
                            if (is_string($result)) {
                                Mage::throwException($result);
                            }
                            $wishlist->save();

                            Mage::dispatchEvent(
                                'wishlist_add_product',
                            array(
                                'wishlist'  => $wishlist,
                                'product'   => $product,
                                'item'      => $result
                            )
                            );


                            $referer = $session->getBeforeWishlistUrl();
                            if ($referer) {
                                $session->setBeforeWishlistUrl(null);
                            } else {
                                $referer = $this->_getRefererUrl();
                            }
                            $session->setAddActionReferer($referer);

                            Mage::helper('wishlist')->calculate();

                            $message = $this->__('%1$s has been added to your wishlist.',
                            $product->getName(), Mage::helper('core')->escapeUrl($referer));

                            $response['status'] = 'SUCCESS';
                            $response['message'] = $message;

                            Mage::unregister('wishlist');

                            $this->loadLayout();
                            $toplink = $this->getLayout()->getBlock('top.links')->toHtml();
                            $sidebar_block = $this->getLayout()->getBlock('wishlist_sidebar');
                            $sidebar = $sidebar_block->toHtml();
                            $response['toplink'] = $toplink;
                            $response['sidebar'] = $sidebar;
                        }
                        catch (Mage_Core_Exception $e) {
                            $response['status'] = 'ERROR';
                            $response['message'] = $this->__('An error occurred while adding item to wishlist: %s', $e->getMessage());
                        }
                        catch (Exception $e) {
                            mage::log($e->getMessage());
                            $response['status'] = 'ERROR';
                            $response['message'] = $this->__('An error occurred while adding item to wishlist.');
                        }
                    }
                }
            }

        }
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
        return;
    }
    public function compareAction(){
        $response = array();

        $productId = (int) $this->getRequest()->getParam('product');

        if ($productId && (Mage::getSingleton('log/visitor')->getId() || Mage::getSingleton('customer/session')->isLoggedIn())) {
            $product = Mage::getModel('catalog/product')
            ->setStoreId(Mage::app()->getStore()->getId())
            ->load($productId);

            if ($product->getId()/* && !$product->isSuper()*/) {
                Mage::getSingleton('catalog/product_compare_list')->addProduct($product);
                $response['status'] = 'SUCCESS';
                $response['message'] = $this->__('The product %s has been added to comparison list.', Mage::helper('core')->escapeHtml($product->getName()));
                Mage::register('referrer_url', $this->_getRefererUrl());
                Mage::helper('catalog/product_compare')->calculate();
                Mage::dispatchEvent('catalog_product_compare_add_product', array('product'=>$product));
                $this->loadLayout();
                $sidebar_block = $this->getLayout()->getBlock('catalog.compare.sidebar');
                $sidebar_block->setTemplate('ajaxwishlist/catalog/product/compare/sidebar.phtml');
                $sidebar = $sidebar_block->toHtml();
                $response['sidebar'] = $sidebar;
            }
        }
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
        return;
    }
}

Create a file named ajaxwishlist.js in magento / skin / frontend / rwd / default / js / ajaxwishlist ajaxwishlist.js

function ajaxCompare(url,id){
    url = url.replace("catalog/product_compare/add","ajax/index/compare");
    url += 'isAjax/1/';
    jQuery('#ajax_loading'+id).show();
    jQuery.ajax( {
        url : url,
        dataType : 'json',
        success : function(data) {
            jQuery('#ajax_loading'+id).hide();
            if(data.status == 'ERROR'){
                alert(data.message);
            }else{
                alert(data.message);
                if(jQuery('.block-compare').length){
                    jQuery('.block-compare').replaceWith(data.sidebar);
                }else{
                    if(jQuery('.col-right').length){
                        jQuery('.col-right').prepend(data.sidebar);
                    }
                }
            }
        }
    });
}
function ajaxWishlist(url,id){
    url = url.replace("wishlist/index/add","ajax/index/addwish");
    url += 'isAjax/1/';
    jQuery('#ajax_loading'+id).show();
    jQuery.ajax( {
        url : url,
        dataType : 'json',
        success : function(data) {
            jQuery('#ajax_loading'+id).hide();
            if(data.status == 'ERROR'){
                alert(data.message);
            }else{
                alert(data.message);
                if(jQuery('.block-wishlist').length){
                    jQuery('.block-wishlist').replaceWith(data.sidebar);
                }else{
                    if(jQuery('.col-right').length){
                        jQuery('.col-right').prepend(data.sidebar);
                    }
                }
            }
        }
    });
}

Create a file called ajax.xml in
app / design / frontend / {yourType} / default / layout /

ajax.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <catalog_product_view translate="label">
        <reference name="head">
            <action method="addItem"><type>js</type><name>jquery/jquery.js</name></action>
            <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/ajaxwishlist/ajaxwishlist.js</name></action> 
            <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.fancybox.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.mousewheel-3.0.6.pack.js</name></action>  
            <action method="addCss"><stylesheet>js/fancybox/jquery.fancybox.css</stylesheet></action>
        </reference>
        <reference name='product.info'>
            <action method='setTemplate'>
                <template>ajax/catalog/product/view.phtml</template>
            </action>
        </reference>
        <reference name='product.info.addtocart'>
            <action method='setTemplate'>
                <template>ajax/catalog/product/view/addtocart.phtml</template>
            </action>
        </reference>
        <reference name='product.info.addto'>
            <action method='setTemplate'><template>ajax/catalog/product/view/addto.phtml</template></action>
        </reference>
    </catalog_product_view>

    <catalog_category_default>
        <reference name="head">
            <action method="addItem"><type>js</type><name>jquery/jquery.js</name></action>
            <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action>  
            <action method="addItem"><type>skin_js</type><name>js/ajaxwishlist/ajaxwishlist.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.fancybox.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.mousewheel-3.0.6.pack.js</name></action>  
            <action method="addCss"><stylesheet>js/fancybox/jquery.fancybox.css</stylesheet></action>
        </reference>
        <reference name='product_list'>
            <action method='setTemplate'><template>ajax/catalog/product/list.phtml</template></action>
        </reference>
    </catalog_category_default>
    <catalog_category_layered>
        <reference name="head">
            <action method="addItem"><type>js</type><name>jquery/jquery.js</name></action>
            <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/ajaxwishlist/ajaxwishlist.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.fancybox.js</name></action>
            <action method="addItem"><type>skin_js</type><name>js/fancybox/jquery.mousewheel-3.0.6.pack.js</name></action>
            <action method="addCss"><stylesheet>js/fancybox/jquery.fancybox.css</stylesheet></action>
        </reference>
        <reference name='product_list'>
            <action method='setTemplate'><template>ajax/catalog/product/list.phtml</template></action>
        </reference>
    </catalog_category_layered>

    <ajax_index_options>
        <reference name="root">
            <action method="setTemplate"><template>page/empty.phtml</template></action>
        </reference>
        <reference name="head">
            <action method="addItem"><type>js</type><name>jquery/jquery.js</name></action>
            <action method="addItem"><type>js</type><name>jquery/noconflict.js</name></action>
        </reference>
        <reference name="head">
            <action method="addJs"><script>varien/product.js</script></action>
            <action method="addJs"><script>varien/configurable.js</script></action>

            <action method="addItem"><type>js_css</type><name>calendar/calendar-win2k-1.css</name><params/><!--<if/><condition>can_load_calendar_js</condition>--></action>
            <action method="addItem"><type>js</type><name>calendar/calendar.js</name><!--<params/><if/><condition>can_load_calendar_js</condition>--></action>
            <action method="addItem"><type>js</type><name>calendar/calendar-setup.js</name><!--<params/><if/><condition>can_load_calendar_js</condition>--></action>
        </reference>
        <reference name="content">
            <block type="catalog/product_view" name="product.info" template="ajax/catalog/product/options.phtml">
                <!--
                <action method="addReviewSummaryTemplate"><type>default</type><template>review/helper/summary.phtml</template></action>
                <action method="addReviewSummaryTemplate"><type>short</type><template>review/helper/summary_short.phtml</template></action>
                <action method="addReviewSummaryTemplate"><type>...</type><template>...</template></action>
                -->

                <block type="catalog/product_view" name="product.info.addtocart" as="addtocart" template="ajax/catalog/product/view/addtocart.phtml"/>

                <block type="catalog/product_view" name="product.info.options.wrapper" as="product_options_wrapper" template="catalog/product/view/options/wrapper.phtml" translate="label">
                    <label>Info Column Options Wrapper</label>
                    <block type="core/template" name="options_js" template="catalog/product/view/options/js.phtml"/>
                    <block type="catalog/product_view_options" name="product.info.options" as="product_options" template="catalog/product/view/options.phtml">
                        <action method="addOptionRenderer"><type>text</type><block>catalog/product_view_options_type_text</block><template>catalog/product/view/options/type/text.phtml</template></action>
                        <action method="addOptionRenderer"><type>file</type><block>catalog/product_view_options_type_file</block><template>catalog/product/view/options/type/file.phtml</template></action>
                        <action method="addOptionRenderer"><type>select</type><block>catalog/product_view_options_type_select</block><template>catalog/product/view/options/type/select.phtml</template></action>
                        <action method="addOptionRenderer"><type>date</type><block>catalog/product_view_options_type_date</block><template>catalog/product/view/options/type/date.phtml</template></action>
                </block>
                        <block type="core/html_calendar" name="html_calendar" as="html_calendar" template="page/js/calendar.phtml"/>
                    </block>
                <block type="catalog/product_view" name="product.info.options.wrapper.bottom" as="product_options_wrapper_bottom" template="catalog/product/view/options/wrapper/bottom.phtml" translate="label">
                    <label>Bottom Block Options Wrapper</label>
                    <action method="insert"><block>product.tierprices</block></action>
                    <block type="catalog/product_view" name="product.clone_prices" as="prices" template="catalog/product/view/price_clone.phtml"/>
                    <action method="append"><block>product.info.addtocart</block></action>
                    <action method="append"><block>product.info.addto</block></action>
                </block>

                <block type="core/template_facade" name="product.info.container1" as="container1">
                    <action method="setDataByKey"><key>alias_in_layout</key><value>container1</value></action>
                    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
                    <action method="append"><block>product.info.options.wrapper</block></action>
                    <action method="append"><block>product.info.options.wrapper.bottom</block></action>
                </block>
                <block type="core/template_facade" name="product.info.container2" as="container2">
                    <action method="setDataByKey"><key>alias_in_layout</key><value>container2</value></action>
                    <action method="setDataByKeyFromRegistry"><key>options_container</key><key_in_registry>product</key_in_registry></action>
                    <action method="append"><block>product.info.options.wrapper</block></action>
                    <action method="append"><block>product.info.options.wrapper.bottom</block></action>
                </block>
                <action method="unsetCallChild"><child>container1</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>
                <action method="unsetCallChild"><child>container2</child><call>ifEquals</call><if>0</if><key>alias_in_layout</key><key>options_container</key></action>
            </block>
        </reference>
    </ajax_index_options>
</layout> 

Add in app / design / frontend / {your theme) /default/template/catalog/product/view.phtml

        var productAddToCartForm = new VarienForm('product_addtocart_form');
                    productAddToCartForm.submit = function(button, url) {
                    if (this.validator.validate()) {
                        var form = this.form;
                        var oldUrl = form.action;

                        if (url) {
                           form.action = url;
                        }
                        var e = null;
        //Start of our new ajax code
                        if(!url){
                        url = jQuery('#product_addtocart_form').attr('action');
                        }
                        url = url.replace("checkout/cart","ajax/index"); 
                        var data = jQuery('#product_addtocart_form').serialize();
                        data += '&isAjax=1';   
                        jQuery('#ajax_loader').show();
                        try {
                            jQuery.ajax({
                                  url: url,
                                  dataType: 'json',
                                  type : 'post',
                                  data: data,
                                  success: function(data){
                                        jQuery('#ajax_loader').hide();
                                        //alert(data.status + ": " + data.message);
                                        if(jQuery('.block-cart')){
                                            jQuery('.block-cart').replaceWith(data.sidebar);
                                        }
                                        if(jQuery('.header .links')){
                                            jQuery('.header .links').replaceWith(data.toplink);
                                            window.location.href = '<?php echo Mage::getUrl("checkout/cart");?>';
                                        }
                                  }
                            });
                        } catch (e) {
                        }

        //End of our new ajax code
                        this.form.action = oldUrl;
                        if (e) {
                            throw e;
                        }

                        if (button && button != 'undefined') {
                            button.disabled = true;
                        }
                    }
                }.bind(productAddToCartForm);
    
28.07.2017 / 21:45