每个手镯都是独一无二的,所以我有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*/
}
});
}
答案 0 :(得分:0)
在默认OC中您可以禁用缺货产品的订购。
只需去管理部门 - &gt;系统 - &gt;设置,点击您商店的编辑,然后导航至选项标签。然后向下滚动到 Stock 部分,并注意 Stock Checkout:选项。如果您选择否并保存用户,则无法订购没有库存的产品。
这意味着如果您创建一个有1件库存的手镯产品,添加一个选项,其中有一件库存,有人订购这个,它的库存将立即设置为不在股票,没有人能够再次订购。
如果您想在订购后隐藏所有未库存的产品,您有两种选择 - 通过禁用产品手动执行此操作,或者您需要在使用产品模型的getProducts()
方法仅加载那些仍有库存的产品。
关于评论的更新:您在OpenCart中误解了选项。您有1件库存的一个选项是尺寸选项,它可能具有不同的值,例如15厘米,16厘米,17厘米,18厘米等所有这些价值包含在一个单一库存项目的单一尺寸选项中意味着,如果我选择其中任何一个,在订购手镯后将不再有剩余的碎片。
你所知道的是为1个库存创建一个15厘米的选项,为1个库存创建16厘米的另一个选项等,因此每个尺寸有1个库存 - 这是不正确的(即误用产品选项)。然而,即使在这种情况下,当不同的尺寸都有一件但产品本身只有一件时,首先订购后应该没有库存,即使有剩余库存的选项......
分步演练:
如果我遗漏了某些内容(或者它仍然无效),请告诉我。
<强>更新强>:
这是一个可能的解决方案(未经测试,但我相信它可以开箱即用,或者可能只有一个简单的错误你可能会解决自己):
打开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
响应的响应,其中包含success
或error
消息。尝试两种情况以确保您正在查看正确的请求(成功您可以在页面顶部看到成功消息,因此您可能确定已完成)然后再次尝试接收错误(对于同一产品) message - 它应该以与成功消息相同的方式包含在响应中。如果仍然无效,请尝试将return;
更改为exit;
...
答案 1 :(得分:0)
很遗憾,我无法评论你的帖子。
在尝试添加产品两次时,我遇到了错误信息未显示的问题。
我需要将JS代码添加到/ catalog / view / theme / * / product / product.tpl
只需搜索“url:'index.php?route = checkout / cart / add'”并立即添加代码shadyxx postet
if (json['success']) { ... }