防止'添加到购物车'如果数量超过库存

时间:2015-10-12 06:53:42

标签: ajax opencart opencart2.x opencart-module

我想禁用通过opencart 2.x中的ajax将产品添加到超出库存限制的购物车中,现在opencart仅在标题上显示消息"标有***的产品无法获得所需数量或没有库存!"。 但是如果订购的产品比订购的产品更多,我想要的产品不会被添加到购物车中,现在openacart的东西既耗时又不会让买家一次又一次地做出改变,

我尝试但不确定我应该在哪里进行更改,无论是从catalog / controller / api / cart.php还是在common.js中开始 或者system / lirary / cart.php,我试试这段代码 -

     if ((int)$qty && ((int)$qty > 0)) {
        if( ($this->session->data['cart'][$key])==(int)$product['stock']){

        }
        else{
            if (!isset($this->session->data['cart'][$key])) {
            $this->session->data['cart'][$key] = (int)$qty;
        } else {
            $this->session->data['cart'][$key] += (int)$qty;
        }
        }

    }

2 个答案:

答案 0 :(得分:2)

如果我理解您的问题,您希望阻止客户在购物车中添加的商品数量超过剩余库存数量?

修改 我在检查OpenCart 2.0.2.0后更新了代码。

好的,首先在行前的controller/checkout/cart.php

if ($json)

add()函数中。

您需要以下内容:

$quantity_in_cart = 0;

$products = $this->cart->getProducts();
foreach ($products as $product) {
    if ($product['product_id'] == $product_id) {
        $quantity_in_cart = $product['quantity'];
        break;
    }
}

if (($quantity + (int)$quantity_in_cart) > $product_info['quantity']) {
    $json['error']['stock'] = $this->language->get('error_not_enough_stock');
}

然后在product.tpl中,如果添加失败,则需要将代码添加到Javascript中以显示错误。它应该放在函数

$('#button-cart').on('click', function() {

后排...

if (json['error']['recurring']) {
    $('select[name=\'recurring_id\']').after('<div class="text-danger">' + json['error']['recurring'] + '</div>');
}

添加的代码是......

if (json['error']['stock']) {
    $('.breadcrumb').after('<div class="alert alert-danger">' + json['error']['stock'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>');
}

当然,您必须将类似的代码添加到将产品添加到购物车的任何其他tpl中,当您获得带有选项的产品时,事情会变得更加复杂,但这是它的基础知识。

答案 1 :(得分:1)

Opencart使用此控制器/功能将产品添加/更新到购物车 目录&gt;控制器&gt;结帐&gt; cart.php
功能 - 添加/编辑

所以你必须为这些功能添加条件

在添加功能代码

之前添加此项
        if (!$json) {

添加功能

        if($quantity > $product_info['quantity'])
            $json['warning'] = $this->language->get('error_stock');

它将检查客户添加的数量是否超过可用数量。

然后在目录&gt;中添加错误的js代码视图&gt;主题&gt;你的主题(我的默认)&gt;产品&gt; product.tpl文件

else if(json['warning']) {
    $('#content').parent().before('<div class="alert alert-danger"><i class="fa fa-check-circle"></i> ' + json['warning'] + '<button type="button" class="close" data-dismiss="alert">&times;</button></div>');

    $('html, body').animate({ scrollTop: 0 }, 'slow');
  }

在这个ajax的最后一行

$('#button-cart').on('click', function() {

Bazinga,你准备好了,产品不会加入购物车:)

注意 - 请使用vqmod / ocmod。