John Th Ответов: 2

Отдельные продукты в корзине, если они не одного размера


Привет, ребята. Я разрабатываю проект, который представляет собой интернет-магазин обуви. Как я могу отделить продукт, если размер не тот же самый. Как вы можете видеть на скриншоте, я добавил Nike LeBron 15 'New Heights' Size 6. Теперь предположим, что я добавлю еще один кол-во Для этого размера, 2 количества, а затем он автоматически обновит количество до 3. Опять же, предположим, что я добавлю Nike LeBron 'New Heights' размер 7. Теперь проблема в том, как я могу показать Nike LeBron 'New Heights' размер 7 в деталях корзины?

Скриншот:
cartdetails — imgbb.com[^]

Что я уже пробовал:

if(isset($_SESSION['item_cart'][$product_id]['product_id']) == $product_id && isset($quantity)) {
                                       $_SESSION['item_cart'][$product_id]['product_qty'] += $quantity;
                                       $qty = ($quantity == 1)  ?  'quantity' : 'quantities';
                                       notify([true,'#222','#fff',$row['product_name']. ' ' .'has been readded with '.$quantity.' '.$qty. '.']);
                                 } else {
                                       $count = (!isset($_SESSION['item_cart'])) ? 0 : count($_SESSION['item_cart']);
                                       $add_quantity = (isset($quantity)) ? $quantity : 1;
                                       $_SESSION['item_cart'][$product_id] = array(
                                              "product_id"=>$product_id,
                                              "product_qty"=>$add_quantity, 
                                              "product_size"=>$product_size,
                                              "product_price"=>$row['product_price'],
                                              "product_name"=>$row['product_name'],
                                              "product_segment"=>$row['segment_id'],  
                                              "product_image"=>$row['product_images'],                                                                                                                                                         
                                              "product_brand"=>$row['product_brand'],
                                              "product_stocks"=>$row['product_stocks'],
                                              "product_category"=>$row['category_name']
                                       );
                                       notify([true,'#222','#fff',$row['product_name']. ' ' .'has been added.']);
                                 }

2 Ответов

Рейтинг:
2

OriginalGriff

Я бы сделал так, чтобы у каждого размера был свой отдельный номер детали:

PN      Desc
1000    Nike LeBron 'New Heights' Size 7
1001    Nike LeBron 'New Heights' Size 8
1002    Nike LeBron 'New Heights' Size 9
1003    Nike LeBron 15 Low Supernova Size 7
1004    Nike LeBron 15 Low Supernova Size 8
...
Таким образом, вы можете проверить запас определенных размеров, а также убедиться, что правильный товар заказан и отправлен.


Рейтинг:
1

Richard Deeming

То, что я обычно делаю, - это разделяю продукты на две таблицы: Product и SKU ("единица хранения запасов") Запись корзины ссылается на запись SKU, а не на продукт.

(Вы, вероятно, также захотите нормализовать таблицу продуктов, чтобы извлечь общие вещи, такие как марка.)

Итак, в вашем примере вы бы имели:

Make
====
Make Id        Name
-------        ----
1              Nike

Product
=======
Product Number    Make Id    Description
--------------    -------    -----------
1000              1          LeBron 'New Heights'
1001              1          LeBron 15 Low Supernova
...

SKU
===
SKU Id      Product Number     Size
---         --------------     ----
1           1000               7
2           1000               8
3           1000               9
4           1001               7
5           1001               8
...

Таким образом, проще отображать "новые высоты" как один продукт с выпадающим списком размеров, а не отображать каждый размер как отдельный продукт.

NB: Тележка не должна хранить детали продукта. Все, что вам нужно для хранения, - это идентификатор SKU, количество и (необязательно) цена.


John Th

До сих пор это то, что я пробовал. У меня есть две таблицы, которые являются tblproducts и tblproducts_extension. tblproduct_extension(product_id) - это внешний ключ tblproducts(product_id). Но это не работает. Кто-нибудь поможет?

Посмотрите на этот скриншот.
https://ibb.co/d2RKS7

John Th

Добавить в корзину скриншот кнопки
https://ibb.co/m6Wsx7

--JQuery/Ajax
function add_to_cart(product_id, status) {
	var quantity = $('#quantity'+product_id).val();
	var product_size = $('#product_size').val();
	var button = (status === 'Delete') ? $('#add_to_cart'+product_id).html(' Add to cart') : $('#add_to_cart'+product_id).html(' Added');
	button,setTimeout(function(){
		var data = { action : 'Add To Cart', product_id : product_id, status : status, quantity : quantity, product_size : product_size };
		$.ajax({
			type: 'POST',
			url: '../pages/class.php',
			data: data,
			cache: false,
			dataType: 'json',
			success: function(data) {
				data.success == true ? successful(data.success,data.bgcolor,data.color,data.message) : successful(data.success,data.bgcolor,data.color,data.message);
			}
		});
		$('#add_to_cart'+product_id).html(' Add to Cart');
		show_cart_count();
		show_cart_contents();
		show_cart_content_in_cart_page();
		show_cart_content_in_checkout_page();
		show_cart_total();
	},300);
}

John Th


--PHP Function
 if(isset($_POST['action']) && !empty($_POST['action'])) {
            $action = $_POST['action'];
            switch($action) {
                   case 'Add To Cart':
                          $product_id = $_POST['product_id'];
                          $product_size = $_POST['product_size'];
                          $quantity = $_POST['quantity'];
                          $status = $_POST['status'];
                          add_to_cart($product_id, $product_size, $quantity, $status);
                   break;
               }
     
 }

 function add_to_cart($product_id, $product_size, $quantity, $status) {
            GLOBAL $db_conn;
            $search_query = "SELECT p.*, pe.*, pct.* FROM tblproduct p JOIN (SELECT p.product_id, MIN(pe.product_extension_id) AS product_extension_id FROM tblproduct p LEFT JOIN tblproduct_extension pe ON pe.product_id = p.product_id WHERE p.product_id='$product_id' GROUP BY product_id) product_unique LEFT JOIN tblproduct_extension pe ON pe.product_extension_id = product_unique.product_extension_id LEFT JOIN tblproduct_carousel pct ON pct.product_id = p.product_id WHERE p.product_id = product_unique.product_id";
            $query = mysqli_query($db_conn, $search_query);
            $row = mysqli_fetch_array($query);

            if(isset($product_id)) {
                    switch ($status) {
case 'Add':
                                 if(isset($_SESSION['item_cart'][$product_id]['product_id']) == $product_id && $product_size && isset($quantity)) {
                                       $_SESSION['item_cart'][$product_id]['product_qty'] += $quantity;
                                       $qty = ($quantity == 1)  ?  'quantity' : 'quantities';
                                       notify([true,'#222','#fff',$row['product_name']. ' ' .'has been readded with '.$quantity.' '.$qty. '.']);
                                 } else {
                                       $count = (!isset($_SESSION['item_cart'])) ? 0 : count($_SESSION['item_cart']);
                                       $add_quantity = (isset($quantity)) ? $quantity : 1;
                                       $_SESSION['item_cart'][$product_id] = array(
                                              "product_id"=>$product_id,
                                              "product_qty"=>$add_quantity, 
                                              "product_size"=>$product_size,
                                              "product_price"=>$row['product_price'],
                                              "product_name"=>$row['product_name'],
                                              "product_segment"=>$row['segment_id'],  
                                              "product_image"=>$row['product_images'],                                                                                                                                                         
                                              "product_brand"=>$row['product_brand'],
                                              "product_stocks"=>$row['product_stocks'],
                                              "product_category"=>$row['category_name']
                                       );
                                       notify([true,'#222','#fff',$row['product_name']. ' ' .'has been added.']);
                                 }
                          break;
                    }
             }
      }

John Th

Помогите ребятам.