Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Корзина товара (товар,количество,размеры)

Сообщения:  [1-10]    [11-20]  [21-26] 

 
 автор: dirol   (17.11.2011 в 15:36)   письмо автору
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."";
             }
            }
          }
        }


  Ответить  
 
 автор: dirol   (17.11.2011 в 15:21)   письмо автору
 
   для: 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);

        }
тут собирается кукисы, если нету кукисов то создает объект, если есть кукисы то просто добавляет значение.

вот тут бы вставить вашу функцию, что если есть в кукисах данный ключ то дописать его

  Ответить  
 
 автор: cheops   (17.11.2011 в 15:16)   письмо автору
 
   для: dirol   (17.11.2011 в 15:13)
 

Ммм... Если честно не знаю, так как логика приложения мне до конца не понятна. Лучше будет создать небольшой API, который будет содержать три функции - извлечения массива из cookie, запись массива в cookie и отображение корзины. Тогда проектировать корзину станет намного проще.

  Ответить  
 
 автор: dirol   (17.11.2011 в 15:13)   письмо автору
 
   для: 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);
}
?>

  Ответить  
 
 автор: cheops   (17.11.2011 в 14:37)   письмо автору
 
   для: 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;

  Ответить  
 
 автор: dirol   (17.11.2011 в 14:11)   письмо автору
 
   для: 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)   письмо автору
 
   для: 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   (16.11.2011 в 13:32)   письмо автору
 
   для: dirol   (16.11.2011 в 11:19)
 

все победил!

  Ответить  
 
 автор: dirol   (16.11.2011 в 11:19)   письмо автору
 
   для: 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 в 10:36)   письмо автору
 
   для: 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

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-26] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования