使用AJAX显示购物车中当前有多少当前产品

时间:2016-08-08 22:56:27

标签: javascript ajax woocommerce

真的希望有人可以帮助我。

我想要实现的是显示一个小图标,显示购物车中当前产品的数量。例如。用户正在浏览产品页面"新鲜橙子",用户将2个新鲜橙子添加到购物车然后我想显示" 2"在产品页面的某个地方。这是我的代码:

select distinct a.name
from applications a 
    join jobhistory jh on a.id = jh.applicationid
    join (
      select applicationid, avg(endtime - starttime) avgtime
      from jobhistory
      where status = 'success'
      group by applicationid
    ) t on a.id = t.applicationid
where jh.status = 'execution' and 
  @current_time - jh.starttime > t.avgtime

如果您刷新产品页面,它会正常工作,但由于我使用AJAX,因此每次用户添加产品时整个页面都不会刷新,我需要更新此数量字段随着更多此产品被添加到购物车中。

如果有人可以提供帮助我真的很感激,任何问题或者如果没有我写的都有意义请告诉我。

2 个答案:

答案 0 :(得分:0)

我找到了一种解决方法,无需使用符合我需求的AJAX。

如果用户稍后返回产品页面,则显示购物车中当前产品的编号。如果为空,则不显示任何内容。

<div class="quantity-in-cart">
<span><?php foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
    $_product = $values['data'];    
    if( $_product->id == get_the_ID() ) { ?><?php echo $values['quantity'] ?>
<?php } } ?></span>
</div>

因此,如果购物车中没有当前产品,则该范围内不会显示任何内容。所以我添加了这个JS来添加0:

$span = $(".quantity-in-cart span");
if($span.text() == ""){
    $span.text("0");
}   

现在,在该范围内设置了默认值0,如果用户将更多当前产品添加到购物车,我们可以将范围中的数字添加到用户通过“添加到购物车”表单选择的数量编号中

$(".description .add-to-cart .add_to_cart_button").click(function() {
    $('.quantity-in-cart span').text(parseInt($('.quantity-in-cart span').text()) + parseInt($('.quantity .qty').val()));
});

......我对此很满意。如果通过php在购物车中没有当前产品,那么在这个范围内获得0可能是更好的方法,但我对PHP不太好。只是想到我会分享我的解决方法,因为有人想找到类似的东西。我仍然有兴趣看看如何使用WooCommerce的AJAX功能正确地完成这项工作(可能有一些可以使用的迷你车代码,但我自己也不太了解它。)

答案 1 :(得分:-1)

我对你提到的购物车并不熟悉,但从概念上讲,我就是这样做的(我最初评论的选项之一):

<div class="quantity-in-cart">
    <span data-qty="0" id="qty">0</span>
</div>

<input type="number" value="0" step="1" id="add_qty">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
var qty = $('#qty').data('qty');

$('#add_qty').on('click', function(event){
    $.ajax({
        url: "path/to/your/script.php",
    }).done(function() {
        $('#qty').attr('data-qty', $(this).val() );
        $('#qty').html( $(this).val() );
    });
});

</script>