Quote from: Andchir at Oct 21, 2009, 12:19 AM
Не надо обобщать. Этот баг возникает конкретно в вашем случае (проверьте на демо-страничке). Я такого ещё не видел. Из-за чего это происходит не знаю. Надо пройтись по всей цепочке добавления в корзину. Для таких случаев сделан режим &debug=`1`.
Я не обобщаю, а пытаюсь вывести симптомы ошибки. Правда, несколько ошибся с выводами.
Сейчас я вижу следующее:
Если имеем несколько товаров без доп. параметров, добавим в корзину по одному разному товару без доп. параметров.
После этого при добавлении в корзину любого из уже присутствующих в корзине товаров, счётчик количества товаров увеличивается для всех товаров в корзине.
Например, в корзине лежит "Товар1" и "Товар2" оба товара не имеют доп. параметров.
При добавлении в корзину ещё одного "Товар1", в корзине становится по 2шт. "Товар1" и "Товар2".
Происходит это потому, что в функции toCart() под-функции thisAction() в строке 325
if(goodsGroup && ($.cookie('stuffAll').indexOf('__'+id)>-1 || $.cookie('stuffAll').indexOf(id)==0)){
if(checkAddit(id)){
groupingGoods(checkAddit(id),count,0);
}else{
$.cookie('stuffAll', $.cookie('stuffAll')+'__'+stuffString, {expires: 1, path: '/'});
$.cookie('additParam',additFilter(id,'all'), {expires: 1, path: '/'});
}
}else{
$.cookie('stuffAll', $.cookie('stuffAll')+'__'+stuffString, {expires: 1, path: '/'});
$.cookie('additParam', additFilter(id,'all'), {expires: 1, path: '/'});
}
мы идём по ветке вызова checkAddit(id), которая возвращает true.
В результате вызывается groupingGoods(true, 1, 0);
Тогда в функции groupingGoods() строка 251
if(newcount){
if(!isNaN(parseInt(num))){
thiscount = num==i+1 ? newcount : n[2];
}else{
thiscount = additParam.indexOf((i+1)+'==')==-1 ? newcount : n[2];
}
}else{
if(!isNaN(parseInt(num))){
thiscount = num==i+1 ? count+parseInt(n[2]) : n[2];
}else{
thiscount = additParam.indexOf((i+1)+'==')==-1 ? count+parseInt(n[2]) : n[2];
}
}
мы идём по ветке else-else и, поскольку additParam == ’’, мы получаем для всех товаров в корзине применяется
thiscount = count+parseInt(n[2]);
Если я правильно понимаю, ожидается, что для товаров без доп.свойств checkAddit(id) должна возвращать индекс товара в корзине (чтобы выполнить условие !isNaN(parseInt(num))==true), или я что-то не учёл?
Andchir, подскажите, пожалуйста.