2

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();
    });
});
4

3 に答える 3

4

jQueryのslideDown()、-Up()、または-Toggle()を使用すると、アニメーションの不具合(1秒間垂直方向に移動するレイヤー)に気付くでしょう。

だから私がしたことはかなり単純でした:

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();
}

これがさらに役立つことを願っています;-)

于 2013-01-22T14:20:23.773 に答える
3

これは驚くほど簡単ですが、数時間を無駄にした後でこれを学びます(実際には無駄ではありませんでした)

製品がカートに追加されたときに監視するオブザーバーを作成します。

Config.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');
 }
}

セッション変数をオンに設定しているだけであることに注意してください。この残りの部分は、できればheader.phtmlまたはfooter.phtml(サイ​​トのすべてのページで利用可能:P)で少量のjavascriptを使用して処理されます。ミニカートの内容部分を下に切り替えて、数秒後にもう一度上に切り替えます

<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>
于 2016-03-04T07:55:30.873 に答える
1

あなたは「...製品が追加されたとき、「あなたのカート」リンクを調べずにそれを伝える方法はありません。」と言います。方法があるに違いありません。カートの「ドロップダウン」アクションをトリガーするコードは何ですか?

ほとんどの場合、jQuery.sliedeDownなどです。ajax呼び出しの成功関数では、同じことを実行する必要があります。または、JavaScriptイベントをプログラムでトリガーすることもできます。たとえば、success関数:$('#cart')。mouseover()を使用します。

于 2012-12-12T14:10:21.900 に答える