laimas, благодарю и на этом :thanks: Буду изучать новое построение конструкции корзины и всё, что с ней связано. Надеюсь, получится.
|
laimas, в общем смотрел я, читал, пытался вникнуть, и понял, что здесь вообще ничего не понял :( Сколько видел уроков с объяснениями, там была моя структура корзины. А здесь, у вас - капец просто. Я уверен, что если грамотно, по вашему корзину построить, то будет всё по науке. Но вот где найти уроки с объяснениями.....?
|
Не знаю, где эти уроки по корзине "как у меня" можно увидеть, но может лучше стоит подумать, зайдя с другой стороны? :)
Суть вопроса была такова - есть у меня боты разных размеров и когда добавляется что-то в корзину, все нормально. Но если в корзину добавляют боты другого размера, то прежний добавленный размер теряется. Будем рассуждать, и для начала забиваем и на РНР, и на все остальные языки, а будем оперировать исключительно блокнотом и карандашом. Есть магазин, в котором туфли: "Туфли черные", цена 100, размеры 40, 41; "Туфли красные", цена 110, размеры 41, 42; "Туфли белые", цена 150, размер 42. Выбираем "Туфли черные", одну пару размера 40, и пишет в блокноте: "Туфли черные": 100 руб., 40 разм., 1 шт. Затем выбрали еще "Туфли красные", добавляем в блокнот запись и в нем уже будет так: "Туфли черные": 100 руб., 40 разм., 1 шт. "Туфли красные": 110 руб., 41 разм., 1 шт. Затем решили добавить еще "Туфли черные", но 41 размера и две пары. Вопрос - как выгоднее записать этот выбор в блокноте, так: "Туфли черные": 100 руб., 40 разм., 1 шт. "Туфли красные": 110 руб., 41 разм., 1 шт. "Туфли черные": 100 руб., 41 разм., 2 шт. или так: "Туфли черные": 100 руб., 40 разм., 1 шт., 41 разм. 2 шт. "Туфли красные": 110 руб., 41 разм., 1 шт. ? |
Как по мне, то первый вариант....(это я про вывод в корзине)
Цитата:
А уроки про "магазин и корзину" - могу ссылку сбросить :) |
Не надо мне ссылок, ибо они кроме "порослей вредного" ничего вам не принесли, так как выбранный вами вариант, это как раз есть самый неудобный даже для блокнота с карандашом, не говоря о компьютере.
Не дай бог и я заражусь. :) Он не удобен тем, что при подсчетах нужно будет пробегать по всем строкам в блокноте, чтобы найти одни и те же туфли, и если выбор туфлей будет на нескольких его страницах, то такой расчет будет затруднителен. А вот при втором варианте каждая запись, это какие-то одни туфли, для которых описаны различные наборы, и расчет всего, это удобно получить сумму за туфли, затем последовательно суммируя ее с суммой следующей строки. Выискивать записи среди страниц блокнота не придется, а просто перелистываем их когда сумма на текущей просчитана. Легенда гласит - труд сделал из обезьяны человека, и когда он понял, что считать на косточках не удобно он придумал компьютер. А чтобы компьютер понимал что от него хотят, человек придумал инструкции для него, которые облек в понятие "язык мышления для компьютера". Эти инструкции описывают конкретные представления человека, например, bcdiv(a, b, c) означает - "взять косточку а, разбить ее на b частей, и кроме полученных частей собрать еще и с осколков". А набором таких различных инструкций можно описать задачу, которую и выполнит компьютер, например, сколько литров наваристого борща получится из косточки разделенной на части, включая и осколки. То есть компьютер всего лишь решает задачу описывающую чисто наши представления о быте, в данном случае "борщ". Чем глубже и разностороннее будут наши представления о мире, чем более удачно мы сможет представлять решения проблем, тем более выгодные инструкции для компьютера, нами придуманные, мы выберем для описания этих представлений и решения проблем, тем оперативнее компьютер выдаст результат. Компьютер выполняет ровно то, что мы от него хотим. А вот если бы наш мир появился не согласно легенде, а в результате большого взрыва (как и вселенной) появились машинные инструкции, которые породили компьютер, которые породили бы нас... Вот тогда все было бы иначе - компьютер бы разбил а на b частей и с осколков, и напечатал - "это борщ, ешь и не гавкай". :-? Есть такой лозунг - "Мы не рабы, рабы не мы!". Мы не рабы машин, мы управляем ими. Хотя айпады поработили человека, но это из области привычек и потребления, "ум" в айпады все равно человек вложил. Поэтому начинать надо с изначального - с представления того, что я хочу от машины, и только потом облекать желание в инструкции. А тут блокнот и карандаш тоже могут помочь. И вообще, существуют блок-схемы, посредством которых можно описать компьютерную программу. Такие схемы не содержат конкретных функций языка, но они хорошо иллюстрируют алгоритм программы, ее конструкцию, блоки, важные узлы. Попробуйте с блокнотом, думаю польза будет, а нет, ну тогда не знаю. Расписывать же уроки и некогда, да и не всегда охота писать много. :) |
laimas, вот у меня есть сессия
$_SESSION['cart'] = array() А мне, получается, нужно записывать этот массив таким образом? $_SESSION['cart'] = array( 209 => array( 'count' => 3, 'price' => 1500, 'prop' => array('size'=>array(42 => 2, 41 => 1), 'name' => 'Галоши') ), 150 => array( 'count' => 2, 'price' => 1000, 'prop' => array('size'=>array(40 => 1, 41 => 1), 'name' => 'Туфли') ) ); И у меня, получается, много лишнего написано? Этот кэйс : case('add_to_cart'): $id = $_GET['id']; $size = $_GET['size']; $_SESSION['cart_size'][$id] = $size; $add_item = add_to_cart($id); $_SESSION['total_items'] = total_items($_SESSION['cart']); $_SESSION['total_price'] = total_price($_SESSION['cart']); header('Location:index.php?view=product&id='.$id); break; И вот это, функция добавления в корзину: function add_to_cart($id, $size) { if(isset($_SESSION['cart'][$id])) { $_SESSION['cart'][$id]++; return true; } else { $_SESSION['cart'][$id] = 1; return true; } return false; } А как же быть с этими функциями подсчёта общего количества и общей суммы?: function total_items($cart) { $num_items = 0; if(is_array($cart)) { foreach($cart as $id => $qty) { $num_items += $qty; } return $num_items; } } function total_price($cart) { $total_price = '0.00'; global $link; if(is_array($cart)) { foreach($cart as $id => $qty) { $result = $link->query("SELECT price FROM products WHERE id='$id' "); if($result) { $item_price = mysqli_fetch_assoc($result); $total_price += $item_price['price'] * $qty; } } return $total_price; } } В общем, что делать???? Как исправляться???? Неужели потратил год в пустую???? |
Кто задавал вопрос о различных размерах ботинок? Если размеры различные и при этом это один ID товара, то каким образом можно узнать что заказаны те или иные его размеры поступая вот таким образом $_SESSION['cart'][$id]++; ?
Если же каждый ID товара может описывать только один размер, тогда да можно было бы так поступать - нет такого ID в корзине, значит добавляем, есть, значит увеличиваем его количество. Организация данных определяется бизнес моделью магазина и для тех, которые торгуют штучными товарами, автомобилями к примеру, это будет одна организация их, а для магазина обуви совсем иная. С этого надо начинать, а не с ходу породить массив в сессии увеличивая количество их элементов, а потом задаваться вопросом почему не получается. |
Я понимаю, что здесь прибавляется в корзине только определённый товар - $_SESSION['cart'][$id]++; А можно в эту сессию добавить каким то образом идентификатор или ключ размера?
|
Добавляйте, а каким-то каким образом, понятия не имею, попробуйте "как-то". :)
Я описывал структуру корзины, которая описывает наборы не только товаров, но и учитывает их характеристики, в данном случае размеры, а могут быть еще и цвет, и другое. Чем эта структура не устраивает ваш магазин? |
laimas, сейчас для меня эта структура без пошаговых объяснений, как переводчику заглянуть в учебник по термоядерной динамике :lol:
Пробовал вот такой составной ключ: $add_item = add_to_cart(sprintf('id%ds%d', $id, $size)); но здесь, когда добавляю один ботинок с двумя разными размерами, в корзине выводится этот ботинок двумя отдельными строчками, но без количества, размеров..... Ещё пробовал такую проверку в корзине, но от этой проверки толка нет...: if ($product !== get_product($id)) { echo $_GET('id'); } if ($b['size'] !== $_SESSION['cart_size'][$id]) { echo $_GET['size']; } |
Часовой пояс GMT +3, время: 16:13. |