Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: marko1985 en 16 Junio 2014, 20:01 pm



Título: Añadir varios items al carrito codeigniter
Publicado por: marko1985 en 16 Junio 2014, 20:01 pm
A ver os explico:

Tengo un jquery que coge los datos de un formulario en el que aparecen las variedades de sabor de un producto.
Imaginaos
Fanta -> añadir al carrito. Al darle al boton se abre un dialog con el formulario para que agregues la cantidad de cada variedad. el código es este.

 
Código
  1. ('.get_flavors_cart').click(function(){
  2.    product = $(this).attr('rel');
  3.    $('.dialog').dialog("open");
  4.   $.get('http://distribucion.nutrifrog.com/products/box_flavors_helper/'+product, function(data){
  5.        $('.dialog').html(data);
  6.        $('.add_items').click(function(){
  7.                    //alert('Pulsaste en añadir carrito');
  8.                    var flavorValues = new Array();
  9.                    $('input[type="number"]').each(function(){
  10.                       index = $(this).attr("rel");
  11.                       value = $(this).val();
  12.                       flavorValues[index] = value;
  13.                    });
  14.                    data_flavors = JSON.stringify(flavorValues);
  15.                    $.post('http://distribucion.nutrifrog.com/products/add_cart_item',{id:product, cart_items:data_flavors}, function(data){
  16.                       $('.dialog').html(data);
  17.                    });
  18.                });
  19.  
  20.  
  21. });

En PHP trabajo con el framework Codeigniter  y recogo los datos JSON y hago un foreach para agregar al carrito cada item.

Código
  1. public function add_cart_item(){    
  2.    $id = $this->input->post('id');                
  3. $values = json_decode($this->input->post('cart_items'));
  4.        $msg = '';
  5.        $valores = count($values);
  6.        $format= $this->products_model->format_name($this->products_model->get_product_property($id, 'id_format'));
  7.        $price = $this->products_model->get_product_property($id, 'pvd');
  8.        $weight                 = $this->products_model->get_product_property($id, 'weight');
  9.        $img                    = $this->products_model->get_product_property($id, 'img_path');
  10.        $name                   = $this->products_model->get_product_property($id, 'name');
  11.        $quantity               = $this->products_model->get_product_property($id, 'quantity');
  12.        foreach($values as $flavor => $cantidad){
  13.                if(!is_null($cantidad)){                
  14.                    $cart_data = array(
  15.                       'id'         => strtoupper(random_string('alnum', 8)),
  16.                       'qty'        => $cantidad,
  17.                       'price'      => $price,
  18.                       'name'       => $name,
  19.                       'product_id' => $id,
  20.                       'img'        => $img,
  21.                       'format'     => $format,                  
  22.                       'weight'     => $weight,
  23.                       'quantity'   => $quantity,
  24.                       'flavor'     => $flavor
  25.                    );  
  26.                    if($this->cart->insert($cart_data)){
  27.                        $msg .="Insertadas $quantity_fl unidades de sabor $flavor<br />";
  28.  
  29.                    }  
  30.                    else {
  31.                        echo "Error: no se ha insertado el sabor $flavor";
  32.                    }                                  
  33.                }    
  34.        }
  35.  
  36.    }

Si el producto solo tiene una variedad no hay problema pero cuándo hay varios sabores, no carga en el carrito nada. Ya le he dado 10000 vueltas, pero no hay manera.

¿Alguna idea?

Gracias de antemano.


Título: Re: Añadir varios items al carrito codeigniter
Publicado por: EFEX en 18 Junio 2014, 05:10 am
Utiliza la consola segun el navegador que uses y fijate los valores que envia..

Una cosa que veo es que estas definiendo ese array(flavorValues) y tratas de definir un index en js no se puede, definilo como objeto.

Código
  1. var flavorValues = new Object();
  2. //O mas simple
  3. var flavorValues = {};


Título: Re: Añadir varios items al carrito codeigniter
Publicado por: JorgeEMX en 19 Junio 2014, 04:36 am
Imprime éste valor en tu php, en los dos escenarios (con una variedad y con 10,000):


Código
  1. var_dump($this->input->post())

Quizá entonces te podremos ayudar en algo.