【问题标题】:Prevent 'Add to cart' If quantity Exceeds than stock如果数量超过库存,防止“添加到购物车”
【发布时间】:2015-10-12 06:53:42
【问题描述】:

我想禁止在 opencart 2.x 中通过 ajax 将产品添加到购物车超出其库存限制,现在 opencart 仅在标题上显示一条消息“标有 *** 的产品没有所需数量或没有库存!”。 但是如果订购的产品比库存的多,我希望不要将产品添加到购物车中,现在 openacart 的东西很耗时,而且不会让买家一次又一次地进行更改,

我试过但不确定我应该在哪里进行更改,无论是从目录/控制器/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;
        }
        }

    }

【问题讨论】:

    标签: ajax opencart opencart2.x opencart-module


    【解决方案1】:

    如果我理解您的问题,您是否希望防止客户在购物车中添加的商品超过库存?

    编辑 我在签入 OpenCart 2.0.2.0 后更新了代码。

    OK 所以首先在你的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,当您拥有带有选项的产品时,事情会变得更加复杂,但这是它的基础。

    【讨论】:

    • 是的你理解的没错,但是opencart是分MVC-L的,如果你能下载opencart,检查一下,谢谢@colmde
    • @AnkitAgarwal - 我知道 Opencart 有 MVC-L。我只评论了“警告用户”部分,因为它不是您原始问题的一部分。我相信您会在 $json 数组中设置一个元素,或者将其发送回 Ajax 调用,然后在 Javascript 中警告用户。我现在做不到,但是今晚(格林威治标准时间)我将能够检查您到那时是否还没有解决它。
    • @ankit - user5419232 给出了比我更好的答案,所以我还没有机会看它。我稍后会尝试,我想我的答案会是一样的。您应该按照她/他的要求提供您的 XML,以便我们确定您的 XML 不起作用的原因。
    • 老实说,虽然它看起来就像上面的 user5419232
    • 工作非常感谢。
    【解决方案2】:

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

    所以你必须给这些函数添加条件

    在添加功能代码之前添加它

            if (!$json) {
    

    在添加功能中

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

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

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

    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。

    【讨论】:

    • 非常好,但不应该是 vQmod :)
    • 是的,必须通过vqmod/ocmod来完成。直接更改核心文件是个坏主意,这里我只是向您展示一种方法。
    • 我计划为购物车中的产品设置最大数量,因此我将以此为起点,感谢您提供优雅的解决方案。
    • @Ankit 不工作?更多描述会有所帮助,例如显示任何 js 错误或响应表单 ajax 调用或产品是否已在购物车中?
    • 什么都没有发生,没有 js 错误。我尝试了很多次,例如逐个添加产品或在产品页面上提供数量,为此我制作了一个 vqmod,还按照您在回答中所说的创建修改文件,但没有任何更改
    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多