osinator Posted October 25, 2014 Share Posted October 25, 2014 (edited) Witam, mam problem związany ze zmianą ilości produktu sprzedawanego w wielopakach (wielokrotności minimalnej ilości potrzebnej do zamówienia). Czyli przy modyfikacji linii koszyka + - . Poradziłem sobie z tym w produkcie i przy używaniu + - zmienia się ta ilość o minimalną ustawiona na produkcie (plik product.js). Czyli jeśli ustawiłem minimalną na 12 sztuk to w danym produkcie skoki +- są wykonywane o 12 w dół lub górę. Nie wiem natomiast gdzie dokonać takich zmian dla linii produktu w koszyku w podsumowaniu zakupów. Tam nadal ilość zmienia się o jeden. Czy modyfikacji takiej można dokonać też z pozycji frontendu, czy trzeba zmienić coś w backendzie? Zmiany w product.js: $(document).on('click', '.product_quantity_up', function(e){ e.preventDefault(); fieldName = $(this).data('field-qty'); var currentVal = parseInt($('input[name='+fieldName+']').val()); if (quantityAvailable > 0) { quantityAvailableT = quantityAvailable; } else { quantityAvailableT = 100000000; } if (minimalQuantity){ !!!!!!!dodany warunek z minimalQauntity if (!isNaN(currentVal) && currentVal < quantityAvailableT) { $('input[name='+fieldName+']').val(currentVal + minimalQuantity).trigger('keyup'); } else { $('input[name='+fieldName+']').val(quantityAvailableT); } } else{ if (!isNaN(currentVal) && currentVal < quantityAvailableT) { $('input[name='+fieldName+']').val(currentVal + 1).trigger('keyup'); } else { $('input[name='+fieldName+']').val(quantityAvailableT); } } }); // The button to decrement the product value $(document).on('click', '.product_quantity_down', function(e){ e.preventDefault(); fieldName = $(this).data('field-qty'); var currentVal = parseInt($('input[name='+fieldName+']').val()); if (minimalQuantity){ !!!!!dodany warunek minimalQuantity if (!isNaN(currentVal) && currentVal > 1) { $('input[name='+fieldName+']').val(currentVal - minimalQuantity).trigger('keyup'); } else { $('input[name='+fieldName+']').val(minimalQuantity); } } else{ if (!isNaN(currentVal) && currentVal > 1) { $('input[name='+fieldName+']').val(currentVal - 1).trigger('keyup'); } else { $('input[name='+fieldName+']').val(minimalQuantity); } } }); Edited October 25, 2014 by osinator (see edit history) Link to comment Share on other sites More sharing options...
osinator Posted October 30, 2014 Author Share Posted October 30, 2014 Znalazłem rozwiązanie, trezba dokonać zmian w pliku classes/cart.php: /* Update quantity if product already exist */ if ($result) { if ($operator == 'up') { $sql = 'SELECT stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity FROM '._DB_PREFIX_.'product p '.Product::sqlStock('p', $id_product_attribute, true, $shop).' WHERE p.id_product = '.$id_product; $result2 = Db::getInstance()->getRow($sql); $product_qty = (int)$result2['quantity']; // Quantity for product pack if (Pack::isPack($id_product)) $product_qty = Pack::getQuantity($id_product, $id_product_attribute); $new_qty = (int)$result['quantity'] + (int)$quantity; if ($minimal_quantity) --- dodany warunek { $qty = '+ '.(int)$minimal_quantity; } else { $qty = '+ '.(int)$quantity; } if (!Product::isAvailableWhenOutOfStock((int)$result2['out_of_stock'])) if ($new_qty > $product_qty) return false; } else if ($operator == 'down') { if ($minimal_quantity) --- dodany warunek { $qty = '- '.(int)$minimal_quantity; } else { $qty = '- '.(int)$quantity; } $new_qty = (int)$result['quantity'] - (int)$quantity; if ($new_qty < $minimal_quantity && $minimal_quantity > 1) return -1; } else return false; /* Delete product from cart */ if ($new_qty <= 0) return $this->deleteProduct((int)$id_product, (int)$id_product_attribute, (int)$id_customization); else if ($new_qty < $minimal_quantity) return -1; else Db::getInstance()->execute(' UPDATE `'._DB_PREFIX_.'cart_product` SET `quantity` = `quantity` '.$qty.', `date_add` = NOW() WHERE `id_product` = '.(int)$id_product. (!empty($id_product_attribute) ? ' AND `id_product_attribute` = '.(int)$id_product_attribute : '').' AND `id_cart` = '.(int)$this->id.(Configuration::get('PS_ALLOW_MULTISHIPPING') && $this->isMultiAddressDelivery() ? ' AND `id_address_delivery` = '.(int)$id_address_delivery : '').' LIMIT 1' ); } Link to comment Share on other sites More sharing options...
Recommended Posts