Opencart +独特的产品,带选项+库存控制

时间:2014-03-30 00:06:22

标签: unique opencart options stock

我放弃了!我无法在任何地方找到正确答案,我请求好人帮忙。 我制作手镯并将它们放在我的opencart商店中。

每个手镯都是独一无二的,所以我有1个库存。但是顾客必须让我知道他/她手腕的大小,这样我就能加上它。

选项询问我的数量。所以,我不能使用它们,因为我必须输入一个数字,否则该选项不可见。 哦,这太疯了! :(

我需要的是: 手镯B --->告诉我你的手腕尺寸:(这里有一个下拉或文字框让顾客选择或写)

订单将显示:手镯B ......尺寸:18cm .... xx $

然后,当客户付款时,Bracelt B缺货。

现在,我可以做到这一切,但每当客户添加选项时,手镯都会保持可用状态。 所以订单上写着: 手镯B ......尺寸:18cm ...... xx $ 手镯B ......尺寸:19cm ...... xx $ etc

我希望我解释得对。 有人可以帮帮我吗? 谢谢sooo sooo sooo DAFNE

function addToCart(product_id, quantity) {
    quantity = typeof(quantity) != 'undefined' ? quantity : 1;

    $.ajax({
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: 'product_id=' + product_id + '&quantity=' + quantity,
        dataType: 'json',
        success: function(json) {
            $('.success, .warning, .attention, .information, .error').remove();

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

            if (json['success']) {
                $('#notification').html('<div class="success" style="display: none;">' + json['success'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');

                $('.success').fadeIn('slow');

                $('#cart-total').html(json['total']);

                $('html, body').animate({ scrollTop: 0 }, 'slow'); 
            }
            /*adding Shadyyx solution*/
            if (json['error']) {
                $('#notification').html('<div class="error" style="display: none;">' + json['error'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');

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

                $('.error').fadeIn('slow');
            }
            /*end adding*/
        }
    });
}

2 个答案:

答案 0 :(得分:0)

在默认OC中您可以禁用缺货产品的订购。

只需去管理部门 - &gt;系统 - &gt;设置,点击您商店的编辑,然后导航至选项标签。然后向下滚动到 Stock 部分,并注意 Stock Checkout:选项。如果您选择并保存用户,则无法订购没有库存的产品。

这意味着如果您创建一个有1件库存的手镯产品,添加一个选项,其中有一件库存,有人订购这个,它的库存将立即设置为不在股票,没有人能够再次订购。

如果您想在订购后隐藏所有未库存的产品,您有两种选择 - 通过禁用产品手动执行此操作,或者您需要在使用产品模型的getProducts()方法仅加载那些仍有库存的产品。

关于评论的更新:您在OpenCart中误解了选项。您有1件库存的一个选项是尺寸选项,它可能具有不同的值,例如15厘米,16厘米,17厘米,18厘米等所有这些价值包含在一个单一库存项目的单一尺寸选项中意味着,如果我选择其中任何一个,在订购手镯后将不再有剩余的碎片。

你所知道的是为1个库存创建一个15厘米的选项,为1个库存创建16厘米的另一个选项等,因此每个尺寸有1个库存 - 这是不正确的(即误用产品选项)。然而,即使在这种情况下,当不同的尺寸都有一件但产品本身只有一件时,首先订购后应该没有库存,即使有剩余库存的选项......

分步演练

  1. 转到您的OC管理部门并登录。
  2. 将鼠标悬停在目录菜单上,然后点击选项条目
  3. 在此选项概述屏幕上,请注意右上角的插入 - 单击它
    1. 输入选项的名称,例如手腕尺寸
    2. 选择选项的类型,选择广播(取决于您希望拥有多少可能的值,超过4,使用选择的)
    3. 排序顺序可以是数值(或空白时,将填充0)
    4. 现在下面有一个空表,其中一行只包含一个按钮添加选项值 - 通过点击它,它将添加一个带有空表单字段的行来输入Option的值;让我们说我们想要增加15厘米到22厘米的手腕尺寸=&gt; 8个值=&gt;单击该按钮8次(注意,每次单击后它将向下移动,因为新行将在其上方显示表单字段)
    5. 进入该8行输入所有必要的值,例如 15cm 16cm ,..., 22cm 作为价值的名称和排序顺序,以满足您的需求(留空可能会导致显示时输入的值不正确)
  4. 点击位于右上角的保存按钮。
  5. 现在,将您自己导航到产品概述,选择要添加此选项的产品,然后单击该行中的编辑。移至数据选项卡,确保手镯具有以下设置:
    • 数量:1
    • 减去股票:是
    • 缺货状态:缺货
  6. 然后转到选项标签,在左侧区域输入选项的名称(手腕尺寸)添加新选项 - 找到选项后,点击该标签,新的选项(新选项卡)将添加到视图中。现在确保选项是必需的,并在将这些设置设置为所有值时添加所有可能的值:
    • 数量:1
    • 减去股票:是
  7. 其他选项值取决于您的商业模式。现在保存产品并尝试使用任何手腕尺寸值进行订购。如果您为商店设置了设置,而客户无法订购缺货的产品,那么这应该对您有用。
  8. 如果我遗漏了某些内容(或者它仍然无效),请告诉我。

    <强>更新

    这是一个可能的解决方案(未经测试,但我相信它可以开箱即用,或者可能只有一个简单的错误你可能会解决自己):

    打开catalog/controller/checkout/cart.php并找到这一行(应该是543):

                $this->cart->add($this->request->post['product_id'], $quantity, $option);
    

    直接在此行之前添加此代码(您可能希望通过vQmod扩展程序执行此操作):

                if ($product_info['quantity'] == 1 && $product_info['subtract'] == 1) {
                    $products = $this->cart->getProducts();
                    $already_added = false;
                    foreach ($products as $product) {
                        if ($product['product_id'] == $this->request->post['product_id']) {
                            $already_added = true;
                            break;
                        }
                    }
    
                    if ($already_added) {
                        return $this->response->setOutput(json_encode(array(
                            'error' => $this->language->get('text_product_already_added')
                        )));
                    }
                }
    

    然后打开此文件catalog/language/english/checkout/cart.php并将其添加到结尾:

    $_['text_product_already_added'] = 'This product has allowed quantity of 1 piece and is already added to a cart. Remove it from the cart to be able to add it (e.g. with different size).';
    

    这只是一个例子,您可以编辑错误消息以满足您的要求。

    警告:这只是一个简单的解决方案,不允许同一个用户(或在同一会话中)将同一产品两次或多次添加到购物车中,但它不会阻止添加和订购相同的产品同时由两个不同的用户(或者一个用户使用两个浏览器)。对于这种边缘情况,您需要实施某种产品锁定 - 将其添加到购物车后,将其保存到数据库中,其他任何人都无法将相同的产品添加到大车。在这种情况下,最好还存储锁定时的日期时间,并有一个可以解锁此产品的cron作业(也可以从购物车中删除),这样产品就永远不会被锁定并且可订购< / em>再次由其他用户...

    编辑JS部分

    打开此文件catalog/view/javascript/common.js并搜索方法function addToCart(product_id, quantity) { - 在此文件中找到此部分:

    if (json['success']) {
        ...
    }
    

    在此之后添加此代码:

            if (json['error']) {
                $('#notification').html('<div class="error" style="display: none;">' + json['error'] + '<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>');
    
                $('html, body').animate({ scrollTop: 0 }, 'slow'); 
    
                $('.error').fadeIn('slow');
            }
    

    这应该足够了。

    更新XYZ

    在PHP中找到这段代码我们添加了什么:

                        return $this->response->setOutput(json_encode(array(
                            'error' => $this->language->get('text_product_already_added')
                        )));
    

    并将其更改为此(然后尝试):

                        $this->response->setOutput(json_encode(array(
                            'error' => $this->language->get('text_product_already_added')
                        )));
                        return;
    

    关键是要在控制台中查看请求index.php?route=checkout/cart/add响应的响应,其中包含successerror消息。尝试两种情况以确保您正在查看正确的请求(成功您可以在页面顶部看到成功消息,因此您可能确定已完成)然后再次尝试接收错误(对于同一产品) message - 它应该以与成功消息相同的方式包含在响应中。如果仍然无效,请尝试将return;更改为exit; ...

答案 1 :(得分:0)

很遗憾,我无法评论你的帖子。

在尝试添加产品两次时,我遇到了错误信息未显示的问题。

我需要将JS代码添加到/ catalog / view / theme / * / product / product.tpl

只需搜索“url:'index.php?route = checkout / cart / add'”并立即添加代码shadyxx postet

if (json['success']) { ... }