|
|
|
| Подскажите пожалуйста, как правильно сделать такую корзину?
Человек выбирает товар на странице указаны размеры товара и допустимое количество.
<form action="" method="post" enctype="multipart/form-data" id="product">
<input type="hidden" name="product_id" value="2423" />
<b class="green">Доступные варианты:</b><br />
<div style="margin-left:5px;">
<table style="width: 100%;">
<tr><td></td></tr><tr>
<td><input type="hidden" name="size[]" value="8357" />S 170</td>
<td><input type="text" maxlength="5" size="3" value="0" name="quantity[]" class="form_s" style="text-align:right;" />шт.</td>
</tr>
<tr>
<td><input type="hidden" name="size[]" value="8356" />M 170</td>
<td><input type="text" maxlength="5" size="3" value="0" name="quantity[]" class="form_s" style="text-align:right;" />шт.</td>
</tr>
<tr>
<td><input type="hidden" name="size[]" value="8355" />L 170</td>
<td><input type="text" maxlength="5" size="3" value="0" name="quantity[]" class="form_s" style="text-align:right;" />шт.</td>
</tr>
<tr>
<td><input type="hidden" name="size[]" value="8358" />XL 170</td>
<td><input type="text" maxlength="5" size="3" value="0" name="quantity[]" class="form_s" style="text-align:right;" />шт.</td>
</tr>
</table>
</div>
|
как правильно записать эти значения, чтобы потом их вывести из базы данных?
в setcookie или в сесии через serialize ?
щас пишутся в кукисы данные, id товара и количество
в корзине выводятся данные id, название, количество, цена.
$cookies = ($_COOKIE['shop']) ;
$result = $db->sql_query("SELECT id, title, preis FROM ".$prefix."_shop WHERE id IN ($cookies)");
while(list($sid, $title, $preis) = $db->sql_fetchrow($result)) {
echo"тут список товара $sid, $title, $preis";
}
|
вот как это все еще разделить по размерам, подскажите пожалуйста | |
|
|
|
|
|
|
|
для: dirol
(09.11.2011 в 18:14)
| | Пока не очень понятно что вызывает сложность? Правильно ли я понимаю, что для cookie вы данные извлекаете? | |
|
|
|
|
|
|
|
для: cheops
(09.11.2011 в 19:07)
| | сложность вызывает запись в кукисы. получается записывать надо id товара потом количество и размер.
и как это выводить правильно если в базе данных товар идет под одним номером а человек заказал два или три варианта размера | |
|
|
|
|
|
|
|
для: dirol
(09.11.2011 в 19:13)
| | Попробуйте закодировать данные, т.е. сформировать строку вида id-total-size для каждого товара и разделять их точкой с запятой, например, "48273-2-345;48272-1-270", такую строку всегда можно будет быстро разобрать при помощи функции explode(). | |
|
|
|
|
|
|
|
для: cheops
(09.11.2011 в 19:23)
| | а выводить как их?
к примеру записали в кукисы одинаковый товар
48273-2-21; 48273-2-22;48273-2-23;
получается один и тот же товар но с разными размерами.
в корзине как это выводить?
$cookies = ($_COOKIE['shop']) ;
$result = $db->sql_query("SELECT id, title, preis FROM ".$prefix."_shop WHERE id IN ($cookies)");
while(list($sid, $title, $preis) = $db->sql_fetchrow($result)) {
echo"тут список товара $sid, $title, $preis";
}
|
чтобы один и тот же товар был с новой строки с указанием размера и количества товара | |
|
|
|
|
|
|
|
для: dirol
(09.11.2011 в 19:42)
| | При разборе cookie можно сформировать двумерный массив, первый элемент которого будет отвечать за идентификатор товара, а второй за размер, т.е. что-то вроде этого
<?php
$arr[48272][22] = 2;
$arr[48273][21] = 2;
$arr[48273][22] = 2;
$arr[48273][23] = 2;
$arr[48274][22] = 2;
?>
| тогда на каждой итерации цикла while(), который сканирует результирующую таблицу нужно будет просто в цикле обращаться к массиву $arr[$sid] и в зависимости от количества его элементов (количества разных заказанных размеров) выводить соответствующую строку. | |
|
|
|
|
|
|
|
для: cheops
(09.11.2011 в 19:51)
| | спасибо. под вечер уже мозг совсем не работает, подскажите как свормировать масив только из id товаров? | |
|
|
|
|
|
|
|
для: dirol
(09.11.2011 в 20:00)
| | А из чего формируем? Из этого 48273-2-21; 48273-2-22;48273-2-23; ? | |
|
|
|
|
|
|
|
для: cheops
(09.11.2011 в 20:10)
| | к примеру да,
48273-2-21; 48273-2-22;48273-2-23; 48273-2-21; 48273-2-22;48273-2-23; 48273-2-21; 48273-2-22;48273-2-23;
первое это id товара 2 количество и размер | |
|
|
|
|
|
|
|
для: dirol
(09.11.2011 в 20:11)
| | Можно начать отталкиваться от следующего скрипта
<?php
$str = "48273-2-21; 48273-2-22;48273-2-23; 48273-2-21; ".
"48273-2-22;48273-2-23; 48273-2-21; 48273-2-22;48273-2-23;";
$str = str_replace(" ", "", $str);
$elements = explode(";", $str);
$basket = array();
if(!empty($elements))
{
for($i = 0; $i < count($elements); $i++)
{
list($id, $total, $size) = explode("-", $elements[$i]);
$basket[$id][$size] = $total;
}
}
?>
| или такого
<?php
$str = "48273-2-21; 48273-2-22;48273-2-23; 48273-2-21; ".
"48273-2-22;48273-2-23; 48273-2-21; 48273-2-22;48273-2-23;";
$str = str_replace(" ", "", $str);
$elements = explode(";", $str);
$basket = array();
if(!empty($elements))
{
for($i = 0; $i < count($elements); $i++)
{
list($id, $total, $size) = explode("-", $elements[$i]);
$basket[$id] = $total."-".$size;
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.11.2011 в 20:15)
| | теперь затупил с добовлением товара(((
методом пос в кукисы загонять как удобнее всего, номер товара размер и количество шт ?
и чтобы если добавлять к определенному товару изменять количество в кукисах?
к примеру на стрнаице у товра есть 5 размеров и напротив каждого поле шт
заказали там XL -5 шт и S -3 шт и M-8 шт,
записать все в кукисы как правильно?
а потом чел передумал и добавил еще к M-2 in товара , как это изменить в кукисах? | |
|
|
|
|
|
|
|
для: dirol
(14.11.2011 в 13:10)
| | Каждый раз нужно разбивать данные из $_COOKIE, формировать массив, производить в нем изменения, потом обратно его упаковывать в строку и класть обратно в cookie. | |
|
|
|
|
 1 Кб |
|
|
для: cheops
(14.11.2011 в 14:04)
| | сделали мне корзину на ajax ? и скрылись.
записывается все в кукисы, но при выводе дурдом.
кто подскажет почеловечески как там выводить , через explode разделить |
null%u0420%u0430%u0437%u043C%u0435%u0440 1=0-2578|%u0420%u0430%u0437%u043C%u0435%u0440 2=6-2578|%u0420%u0430%u0437%u043C%u0435%u0440 3=0-2578|%u0420%u0430%u0437%u043C%u0435%u0440 4=0-2578|%u0420%u0430%u0437%u043C%u0435%u0440 5=0-2578|
|
| |
|
|
|
|
|
|
|
для: dirol
(15.11.2011 в 17:25)
| | Это UTF-8, дать вам функцию декодирования? | |
|
|
|
|
|
|
|
для: cheops
(15.11.2011 в 17:53)
| | если не сложно.
попробывал iconv, но чтото без результатно | |
|
|
|
|
|
|
|
для: dirol
(15.11.2011 в 18:05)
| | Решение можно найти в теме по ссылке http://softtime.ru/forum/read.php?id_forum=1&id_theme=82911 (только нужно будет слеши заменить на %). | |
|
|
|
|
|
|
|
для: cheops
(15.11.2011 в 18:33)
| | сделал на ajax передачу размеров и количество товаров
Array
(
[0] => L 170
[1] => M 170
[2] => S 170
[3] => XL 170
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
)
Array
(
[0] => 55
[1] => 55
[2] => 55
[3] => 55
[4] =>
[5] =>
[6] =>
[7] =>
[8] =>
[9] =>
[10] =>
)
|
и есстествно id товара
как все собрать и превести к виду, который был указан выше, 48273-2-21
id -size-count | |
|
|
|
|
|
|
|
для: dirol
(16.11.2011 в 10:36)
| | вроде собрал
for ($i = 0; $i < (11); $i++) {
$size[] = trim(str_replace(array("'", '"', " ", " ", ":", ";", ".", "(", ")"), "", ($_REQUEST["size".$i.""])));
}
for ($a = 0; $a < (11); $a++) {
$text[] = ($_REQUEST["text".$a.""]);
}
$text=array_diff($text,array(""));
$size=array_diff($size,array(""));
for ($i = 0; $i < count($size); $i++) {
$finish.="$cid-$size[$i]-$text[$i]|";
}
|
| |
|
|
|
|
|
|
|
для: dirol
(16.11.2011 в 11:19)
| | все победил! | |
|
|
|
|
|
|
|
для: dirol
(16.11.2011 в 13:32)
| | все выдохся, не получается
в кукисах хранится 91-44164-30|91-46170-10|91-48170-22|11-XL170-22|11-XL170-10|
первое это id товара - потом размер - количество
человек заказал товар потом еще раз добавил туже самую позицую, докупил ее как бы. она тоже заносится в кукисы но дублируется.
не могу понять как разабрать кукисы на предмет к примеру,
найти 11-XL170 и к его количеству 22 шт прибавить еще 10 шт | |
|
|
|
|
|
|
|
для: dirol
(17.11.2011 в 14:02)
| |
$cookies = ($_COOKIE['shop']) ? ($_COOKIE['shop']) : "" ;
$str = str_replace(" ", "", $cookies);
$elements = explode("|", $str);
$text=array_diff($text,array(""));
$size=array_diff($size,array(""));
for ($i = 0; $i < count($size); $i++) {
if($text[$i]!=0){
list($id, $sizes, $totals) = explode("-", $elements[$i]);
$finish.="$cid-$size[$i]-$text[$i]|";
}
}
|
понамутил | |
|
|
|
|
|
|
|
для: dirol
(17.11.2011 в 14:02)
| | Погодите, у вас в cookie не должно быть одинаковых ключей, предполагается, что вы действуете как-то так
<?php
// Исходные данные
$cookie = "91-44164-30|91-46170-10|91-48170-22|11-XL170-22";
// Преобразуем сроку в массив
$items = explode("|", $cookie);
$products = array();
for($i = 0; $i < count($items); $i++)
{
if(empty($items[$i])) continue;
list($id, $sizes, $totals) = explode("-", $items[$i]);
$products[$id][$sizes] = $totals;
}
// Выводим промежуточный результат
echo "<pre>";
print_r($products);
echo "</pre>";
// Увеличиваем количество товаров для id = 11
$products[11]['XL170'] += 10;
// Преобразуем массив обратно в строку
$subcookie = array();
foreach($products as $id => $sizes)
{
foreach($sizes as $size => $total)
{
$subcookie[] = $id."-".$size."-".$total;
}
}
$cookie = implode("|", $subcookie);
echo $cookie;
?>
| если же все-таки дублирующие записи в cookie необходимы и никуда от них не деться, то при первой же возможности их нужно сворачивать, для этого, в приведенном выше коде, строку
$products[$id][$sizes] = $totals;
| следует заменить на
$products[$id][$sizes] += $totals;
|
| |
|
|
|
|
|
|
|
для: cheops
(17.11.2011 в 14:37)
| | нет , хочется без дублирования.
куда правильно вставить ваш код в данную функцию?
<?php
function add_basket2(){
global $db, $prefix, $confso;
$cid = intval($_REQUEST['id']);
$vote_check = ($_REQUEST['vote']);
for ($i = 0; $i < (17); $i++) {
$size[] = trim(str_replace(array("'", '"', " ", " ", ":", ";", ".", "(", ")"), "", ($_REQUEST["size".$i.""])));
}
for ($a = 0; $a < (17); $a++) {
$text[] = ($_REQUEST["text".$a.""]);
}
$text=array_diff($text,array(""));
$size=array_diff($size,array(""));
for ($i = 0; $i < count($size); $i++) {
if($text[$i]!=0){
$finish[] = $id."-".$size[$i]."-".$text[$i];
}
}
$finish = implode("|", $finish);
if ($cookies) {
$info = ("".$cookies."".$finish."");
setcookie("shop", ($info), time() + 86400);
} else {
setcookie("shop", ($finish), time() + 86400);
$info = ($finish);
}
show_basket($info, $cid, $typ);
}
?>
|
| |
|
|
|
|
|
|
|
для: dirol
(17.11.2011 в 15:13)
| | Ммм... Если честно не знаю, так как логика приложения мне до конца не понятна. Лучше будет создать небольшой API, который будет содержать три функции - извлечения массива из cookie, запись массива в cookie и отображение корзины. Тогда проектировать корзину станет намного проще. | |
|
|
|
|
|
|
|
для: cheops
(17.11.2011 в 15:16)
| | ну тут получается добавление в корзину, в данном случаии в кукисы, и показ корзины function show_basket
$cid = intval($_REQUEST['id']); это id товара
|
for ($i = 0; $i < (17); $i++) {
$size[] = trim(str_replace(array("'", '"', " ", " ", ":", ";", ".", "(", ")"), "", ($_REQUEST["size".$i.""])));
}
это размеры
|
for ($a = 0; $a < (17); $a++) {
$text[] = ($_REQUEST["text".$a.""]);
}
тут количество товара
|
$text=array_diff($text,array(""));
$size=array_diff($size,array(""));
for ($i = 0; $i < count($size); $i++) {
if($text[$i]!=0){
$finish[] = $cid."-".$size[$i]."-".$text[$i];
}
}
$finish = implode("|", $finish);
if ($cookies) {
$info = ("".$cookies."".$finish."");
setcookie("shop", ($info), time() + 86400);
} else {
setcookie("shop", ($finish), time() + 86400);
$info = ($finish);
}
тут собирается кукисы, если нету кукисов то создает объект, если есть кукисы то просто добавляет значение.
вот тут бы вставить вашу функцию, что если есть в кукисах данный ключ то дописать его
|
| |
|
|
|
|
 18 Кб |
|
|
для: dirol
(17.11.2011 в 15:21)
| | или ладно , если дублируются пусть дублируются, но при выводе товара в корзине чтобы объединялись, такое возможно?
<?php
$cookies = ($_COOKIE['shop']);
$str = str_replace(" ", "", $cookies);
$elements = explode("|", $str);
$basket = array();
$sizes = array();
if(!empty($elements)){
for($i = 0; $i < count($elements); $i++){
list($id, $size, $totals) = explode("-", $elements[$i]);
$basket[] = $id;
$sizes[] = $size;
}
}
$arr_i = implode(",", $basket);
$arr_i = chop($arr_i, ",");
$pattern = "#(XS|S|M|L|XL|XXL|XXL|XXXL|XXS|XS|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|)(\d+)#";
$result = $db->sql_query("SELECT id, title, preis FROM ".$prefix."_shop WHERE id IN ($arr_i)");
while(list($sid, $title, $preis) = $db->sql_fetchrow($result)) {
if(!empty($elements)){
for($i = 0; $i < count($elements); $i++){
list($id, $size, $totals) = explode("-", $elements[$i]);
if($id==$sid){
$sizes = preg_replace($pattern, "\\1 \\2", $size);
$content .= "".$sid."-<a href=\"index.php?name=shop&op=view&id=$sid\">".$title."</a>-".$sizes."-".$totals."";
}
}
}
}
|
| |
|
|
|