【问题标题】:Toggle dropdown mini-cart when product added to basket将产品添加到购物篮时切换下拉迷你购物车
【发布时间】:2012-12-12 13:57:20
【问题描述】:

我在我的 Magento 商店的标题中放置了一个 jQuery 下拉迷你购物车。当“您的购物车”链接悬停时,下拉菜单会显示最近添加的项目。

我现在已经集成了 Ajax 添加到购物车扩展,它允许客户在不刷新页面的情况下添加到购物车。我现在遇到的问题是,添加产品时,如果不将鼠标悬停在“您的购物车”链接上,就无法判断。

我希望能够在添加产品时自动下拉迷你购物车,但我不知道该怎么做?

有人可以给我一些建议吗?

提前致谢!

Ajax 代码加入购物车:

    <script type="text/javascript">
    //<![CDATA[
        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"); // New Code
            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').show();
                        //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);
                        }
                    }
                });
            } catch (e) {
            }
            // End of our new ajax code
            this.form.action = oldUrl;
            if (e) {
                throw e;
            }
        }
    }.bind(productAddToCartForm);
    productAddToCartForm.submitLight = function(button, url){
            if(this.validator) {
                var nv = Validation.methods;
                delete Validation.methods['required-entry'];
                delete Validation.methods['validate-one-required'];
                delete Validation.methods['validate-one-required-by-name'];
                if (this.validator.validate()) {
                    if (url) {
                        this.form.action = url;
                    }
                    this.form.submit();
                }
                Object.extend(Validation.methods, nv);
            }
        }.bind(productAddToCartForm);
    //]]>
    </script>

And code for Mini-Cart:

function slideUp()
{
    jQuery('#topCartContent:visible').slideUp(1000);
    jQuery('.top-link-cart').addClass('mini-cart-layer-up');
    jQuery('.top-link-cart').removeClass('mini-cart-layer-down');
}

function slideDown()
{
    jQuery('#topCartContent:hidden').slideDown(1000);
    /*startTimer()*/ /* optional*/
    jQuery('.top-link-cart').addClass('mini-cart-layer-down');
    jQuery('.top-link-cart').removeClass('mini-cart-layer-up');
}

function toggleTopCart()
{
    if(jQuery('#topCartContent').is(':visible'))
    {
        slideUp();
    } else {
        slideDown();
    }
}

var timer;
function startTimer()
{
    timer = setTimeout(function(){
        slideUp();
    }, 5000);
}

jQuery(document).ready(function(){
    jQuery('.top-link-cart').mouseover(function(){
        toggleTopCart();
    });

    jQuery('.top-link-cart').mouseover(function(){
        clearTimeout(timer);
    }).mouseout(function(){
        startTimer();
    });

    jQuery("#topCartContent").mouseover(function() {
        clearTimeout(timer);
    }).mouseout(function(){
        startTimer();
    });
});

【问题讨论】:

    标签: magento jquery


    【解决方案1】:

    如果您使用 jQuery slideDown()、-Up() 或 -Toggle(),您会注意到动画故障(也就是垂直移动层一秒钟)。

    所以我所做的很简单:

    if ( $('.messages .success-msg').length ) {
    
        $('.messages').css('display','none'); // 'disable' default messages on top of content
    
        function showCartForASecOrThreeAndAHalf() {
            $('#mini-cart .menu').css('display','block');
            setTimeout(function () { $('#mini-cart .menu').css('display',''); }, 3500); // display:'' to restore previous settings
            }
    
            showCartForASecOrThreeAndAHalf();
    }
    

    希望这可以进一步帮助您;-)

    【讨论】:

    • 感谢您的帮助!
    • 谢谢,锅很好
    【解决方案2】:

    这非常简单,但我在浪费了几个小时后才学会了这一点(实际上并没有浪费)

    创建一个观察者来观察产品何时添加到购物车。

    配置.xml

    <events>
    <checkout_cart_product_add_after>
        <observers>
            <namespace_triggerevent>
                <type>singleton</type>       
                <class>NameSpace_TriggerEvent_Model_Observer</class>
                <method>opencartafteradd</method>
            </namespace_triggerevent>
        </observers>
    </checkout_cart_product_add_after>
    </events>
    

    现在,Observer.php

    <?php
    
    class NameSpace_TriggerEvent_Model_Observer
    {
    public function opencartafteradd($observer) {
        $event = $observer->getEvent();
        $product = $event->getProduct(); 
        Mage::getSingleton('core/session')->setOpenMinicart('ON');
     }
    }
    

    请注意,我们只是将会话变量设置为 ON。在此之后,将使用少量 javascript 处理最好的 header.phtml 或 footer.phtml (可用于站点上的每个页面:P)。我只是将迷你购物车内容部分向下切换,几秒钟后再次向上切换

    <script type="text/javascript">
    var $k = jQuery.noConflict();
    $k(document).ready(function() {
        var screen_width = $k(window).width();
        var openminicart = '<?php echo Mage::getSingleton('core/session')->getOpenMinicart();?>';
        if (screen_width > 780) {
            if (openminicart == 'ON') {
                    jQuery("#header-cart").slideToggle('slow');
                    jQuery("#header-cart").addClass('skip-active');
    
    
                    setTimeout(function() {
                        jQuery("#header-cart").slideUp('fast');
                        $k('#header-cart').removeClass('skip-active');
                    }, 4000);
    
    
            <?php Mage::getSingleton('core/session')->unsOpenMinicart();?>
    
            }
        }
    });
    </script>
    

    【讨论】:

      【解决方案3】:

      您说'...添加产品时,如果不将鼠标悬停在“您的购物车”链接上,就无法判断。'。一定有办法的。触发购物车“下拉”动作的代码是什么?

      很可能是 jQuery.sliedeDown 或类似的。在您的 ajax 调用的成功函数中,您需要执行相同的操作。或者,您可以通过编程方式触发 JavaScript 事件,例如在成功函数中:$('#cart').mouseover()。

      【讨论】:

      • 我已经为上面的 mini-cart-dropdown 添加了购物车^
      猜你喜欢
      • 1970-01-01
      • 2012-06-30
      • 2011-12-19
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      相关资源
      最近更新 更多