17.05.2015, 16:18
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
laimas, благодарю и на этом Буду изучать новое построение конструкции корзины и всё, что с ней связано. Надеюсь, получится.
|
|
20.05.2015, 11:23
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
laimas, в общем смотрел я, читал, пытался вникнуть, и понял, что здесь вообще ничего не понял Сколько видел уроков с объяснениями, там была моя структура корзины. А здесь, у вас - капец просто. Я уверен, что если грамотно, по вашему корзину построить, то будет всё по науке. Но вот где найти уроки с объяснениями.....?
|
|
20.05.2015, 11:56
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Не знаю, где эти уроки по корзине "как у меня" можно увидеть, но может лучше стоит подумать, зайдя с другой стороны?
Суть вопроса была такова - есть у меня боты разных размеров и когда добавляется что-то в корзину, все нормально. Но если в корзину добавляют боты другого размера, то прежний добавленный размер теряется.
Будем рассуждать, и для начала забиваем и на РНР, и на все остальные языки, а будем оперировать исключительно блокнотом и карандашом.
Есть магазин, в котором туфли: "Туфли черные", цена 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 шт.
?
|
|
20.05.2015, 12:02
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
Как по мне, то первый вариант....(это я про вывод в корзине)
Сообщение от laimas
|
"Туфли черные": 100 руб., 40 разм., 1 шт.
"Туфли красные": 110 руб., 41 разм., 1 шт.
"Туфли черные": 100 руб., 41 разм., 2 шт.
|
А вот оптимально хорошо выглядит второй вариант.
А уроки про "магазин и корзину" - могу ссылку сбросить
|
|
20.05.2015, 13:37
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Не надо мне ссылок, ибо они кроме "порослей вредного" ничего вам не принесли, так как выбранный вами вариант, это как раз есть самый неудобный даже для блокнота с карандашом, не говоря о компьютере.
Не дай бог и я заражусь.
Он не удобен тем, что при подсчетах нужно будет пробегать по всем строкам в блокноте, чтобы найти одни и те же туфли, и если выбор туфлей будет на нескольких его страницах, то такой расчет будет затруднителен. А вот при втором варианте каждая запись, это какие-то одни туфли, для которых описаны различные наборы, и расчет всего, это удобно получить сумму за туфли, затем последовательно суммируя ее с суммой следующей строки. Выискивать записи среди страниц блокнота не придется, а просто перелистываем их когда сумма на текущей просчитана.
Легенда гласит - труд сделал из обезьяны человека, и когда он понял, что считать на косточках не удобно он придумал компьютер. А чтобы компьютер понимал что от него хотят, человек придумал инструкции для него, которые облек в понятие "язык мышления для компьютера". Эти инструкции описывают конкретные представления человека, например, bcdiv(a, b, c) означает - "взять косточку а, разбить ее на b частей, и кроме полученных частей собрать еще и с осколков". А набором таких различных инструкций можно описать задачу, которую и выполнит компьютер, например, сколько литров наваристого борща получится из косточки разделенной на части, включая и осколки.
То есть компьютер всего лишь решает задачу описывающую чисто наши представления о быте, в данном случае "борщ". Чем глубже и разностороннее будут наши представления о мире, чем более удачно мы сможет представлять решения проблем, тем более выгодные инструкции для компьютера, нами придуманные, мы выберем для описания этих представлений и решения проблем, тем оперативнее компьютер выдаст результат.
Компьютер выполняет ровно то, что мы от него хотим. А вот если бы наш мир появился не согласно легенде, а в результате большого взрыва (как и вселенной) появились машинные инструкции, которые породили компьютер, которые породили бы нас... Вот тогда все было бы иначе - компьютер бы разбил а на b частей и с осколков, и напечатал - "это борщ, ешь и не гавкай".
Есть такой лозунг - "Мы не рабы, рабы не мы!". Мы не рабы машин, мы управляем ими. Хотя айпады поработили человека, но это из области привычек и потребления, "ум" в айпады все равно человек вложил. Поэтому начинать надо с изначального - с представления того, что я хочу от машины, и только потом облекать желание в инструкции. А тут блокнот и карандаш тоже могут помочь. И вообще, существуют блок-схемы, посредством которых можно описать компьютерную программу. Такие схемы не содержат конкретных функций языка, но они хорошо иллюстрируют алгоритм программы, ее конструкцию, блоки, важные узлы.
Попробуйте с блокнотом, думаю польза будет, а нет, ну тогда не знаю. Расписывать же уроки и некогда, да и не всегда охота писать много.
Последний раз редактировалось laimas, 22.05.2015 в 02:04.
|
|
21.05.2015, 12:10
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
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;
}
}
В общем, что делать???? Как исправляться???? Неужели потратил год в пустую????
|
|
21.05.2015, 19:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Кто задавал вопрос о различных размерах ботинок? Если размеры различные и при этом это один ID товара, то каким образом можно узнать что заказаны те или иные его размеры поступая вот таким образом $_SESSION['cart'][$id]++; ?
Если же каждый ID товара может описывать только один размер, тогда да можно было бы так поступать - нет такого ID в корзине, значит добавляем, есть, значит увеличиваем его количество.
Организация данных определяется бизнес моделью магазина и для тех, которые торгуют штучными товарами, автомобилями к примеру, это будет одна организация их, а для магазина обуви совсем иная. С этого надо начинать, а не с ходу породить массив в сессии увеличивая количество их элементов, а потом задаваться вопросом почему не получается.
|
|
21.05.2015, 22:27
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
Я понимаю, что здесь прибавляется в корзине только определённый товар - $_SESSION['cart'][$id]++; А можно в эту сессию добавить каким то образом идентификатор или ключ размера?
|
|
22.05.2015, 01:21
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Добавляйте, а каким-то каким образом, понятия не имею, попробуйте "как-то".
Я описывал структуру корзины, которая описывает наборы не только товаров, но и учитывает их характеристики, в данном случае размеры, а могут быть еще и цвет, и другое. Чем эта структура не устраивает ваш магазин?
|
|
22.05.2015, 17:46
|
Аспирант
|
|
Регистрация: 06.04.2015
Сообщений: 52
|
|
laimas, сейчас для меня эта структура без пошаговых объяснений, как переводчику заглянуть в учебник по термоядерной динамике
Пробовал вот такой составной ключ:
$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'];
}
|
|
|
|