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, время: 03:15. |