Добрый день. Нужно чтобы в корзину можно было добавить только 1 одинаковый товар. То есть чтобы было перчатки красные 1 шт, ботинки черные 1 шт. И не было возможности добавить перчатки красные 3 шт. В файле product.twig я уже поправил строчку <input type="text" name="quantity" value="{{ minimum }}" size="2" id="input-quantity" class="form-control" /> заменил на строчку <input type="hidden" name="quantity" value="1" id="input-quantity" class="form-control" /> теперь при нажатии кнопки добавляется только 1 товар. Но если нажать кнопку несколько раз, то товар плюсуется. Подскажите пожалуйста. В каком файле происходит плюсовка одинакового товара, когда кнопку нажимаем добавить, и что там надо поменять, чтобы он не прибавлялся?
сначало все попадает в данный контроллер. \catalog\controller\checkout\cart.php PHP: public function add() { тут можно проверить с каким id товар добавляется и если уже есть такой в корзине, то записать ошибку $json['error'] Примеры там же. А узнать какие товары есть в корзине, примеры есть выше по коду.. PHP: $products = $this->cart->getProducts(); foreach ($products as $product) {
Большое спасибо за ответ да действительно помогло добавил такой код $products = $this->cart->getProducts(); foreach ($products as $product) { if ($product['product_id'] == $product_id) $json['error']['recurring'] = $this->language->get('error_recurring_required'); } и перестало добавлять более 1. Но у меня в товаре есть особенность которую сразу не указал. А именно наличие для каждого товара Available Options и один товар с одним ID например перчатки, но с разными опциями например: перчатки красные перчатки серые должен добавляться как разный товар но перчатки красные не более 1 шт перчатки серые не более 1 шт. а так как у перчатки - один ID то уже не добавляются перчатки с разными опциями. Как еще к проверке по ID добавить проверку по опциям? и если и они уже совпадают то записывать ерор.
посмотрите там же пример начиная с PHP: foreach ($product['option'] as $option) { т.е нужно например в цикле найти добавляемый товар , и посмотреть на его опции и сравнить значение. Это в простейшем варианте.
Появилось время допилить проблему. Выложу здесь может кому понадобится. в файле \catalog\controller\checkout\cart.php после строк ---- Код: foreach ($product_options as $product_option) { if ($product_option['required'] && empty($option[$product_option['product_option_id']])) { $json['error']['option'][$product_option['product_option_id']] = sprintf($this->language->get('error_required'), $product_option['name']); } } вставил следующий код --- $products = $this->cart->getProducts(); $yes = 1; foreach ($products as $product) { if ($product['product_id'] == $product_id) { $yes = 0; foreach ($product_options as $product_option) { foreach ($product['option'] as $option_cart) { if($product_option['product_option_id'] == $option_cart['product_option_id']) { if(!isset($option[$product_option['product_option_id']])) { $option[$product_option['product_option_id']] = ""; } if(!isset($option_cart['value'])) { $option_cart['value'] = ""; } if($option[$product_option['product_option_id']] != $option_cart['value']) $yes = 1; } } } } } if($yes == 0) $json['error']['recurring'] = $this->language->get('error_recurring_required'); Вроде все работает. Товар с одинаковым ID добавляет в корзину повторно только если у него отличается хотя бы одна опция. Если опции одинаковые товар повторно не добавляется. Возможно сделал не оптимально, поправте если что)
Подниму тему. Появилась еще одна проблема. Если не залогиненный пользователь набирает товара в корзину. А затем он логинится, а у него например уже был такой товар в корзине. В данный момент товары старой и новой корзины складываются при входе пользователя. Подскажите в каком контролере это происходит? как исключить повторное добавление одинакового товара при входе пользователя?
Большое спасибо за подсказку. вопрос решил в файле system/library/cart/cart.php есть функция public function add( в ней закоментировал строку // $this->db->query("UPDATE " . DB_PREFIX . "cart SET quantity = (quantity + " . (int)$quantity . ") WHERE ... она отвечает за увеличение quantity при добавлении одинакового товара И проблема ушла, больше 1 одинакового товара не добавляется, quantity всегда 1 и не увеличивается если складываются корзины залогиненного и не залогиненного пользователя.