我想通过SKU或MODEL而不是Product ID将产品添加到购物车中。
这是它如何添加到category.twig文件中的代码

<button type="button" onclick="cart.add('{{ product.product_id }}', '{{ product.minimum }}');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">{{ button_cart }}</span></button>


这是js

// Cart add remove functions
var cart = {
    'add': function(product_id, quantity) {
        $.ajax({
            url: 'index.php?route=checkout/cart/add',
            type: 'post',
            data: 'product_id=' + product_id + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
            dataType: 'json',
            beforeSend: function() {
                $('#cart > button').button('loading');
            },
            complete: function() {
                $('#cart > button').button('reset');
            },
            success: function(json) {
                $('.alert-dismissible, .text-danger').remove();

                if (json['redirect']) {
                    location = json['redirect'];
                }

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

                    // Need to set timeout otherwise it wont update the total
                    setTimeout(function () {
                        $('#cart > button').html('<span id="cart-total"><i class="fa fa-shopping-cart"></i> ' + json['total'] + '</span>');
                    }, 100);

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

                    $('#cart > ul').load('index.php?route=common/cart/info ul li');
                }
            },
            error: function(xhr, ajaxOptions, thrownError) {
                alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
        });
    },
}


在上面的代码中,opencart使用product_id将产品添加到购物车中,但我想通过sku或model添加它

最佳答案

在common.js中,从add派生的新方法(基本上将product_id更改为sku,并调用了addBySku)

    'addBySku': function(sku, quantity) {
        $.ajax({
            url: 'index.php?route=checkout/cart/addBySku',
            type: 'post',
            data: 'sku=' + sku + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1),
            //nothing else changed from 'add' method


在添加方法派生的catalog / controller / checkout / cart.php中。只需通过sku获取product_id,然后将其发布并保持其他所有内容不变即可。

    public function addBySku() {
        $this->load->language('checkout/cart');
        $this->load->model('catalog/product');

        $json = array();

        if (isset($this->request->post['sku'])) {
            $product_id = (int)$this->model_catalog_product->productIDBySku($this->request->post['sku']);
        } else {
            $product_id = 0;
        }
        $this->request->post['product_id'] = $product_id;


        //nothing else changed from 'add' method




在catalog / model / catalog / product.php中。添加此方法以按product_id检索sku

    public function productIDBySku($sku) {
        $query = $this->db->query("select product_id from " . DB_PREFIX . "product where sku = '" . $this->db->escape($sku) . "'");
        return $query->row['product_id'];
    }


希望能有所帮助。我没有测试。
不要忘记调用正确的方法并通过sku

<!--<button type="button" onclick="cart.add('{{ product.product_id }}',-->
<button type="button" onclick="cart.addBySku('{{ product.sku }}',

关于javascript - 如何在Opencart 3.0中按sku或型号将产品添加到购物车中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59999567/

10-13 01:04