Foros del Web » Programando para Internet » PHP » CodeIgniter »

Codeigniter: Clase Cart (implementar carro de compra)

Estas en el tema de Codeigniter: Clase Cart (implementar carro de compra) en el foro de CodeIgniter en Foros del Web. Estoy loquísimo ya. La clase es súper sencilla de utilizar y no sé en qué puedo fallar. Incluyo la librería "cart" librería en autoload. Tengo ...
  #1 (permalink)  
Antiguo 08/07/2010, 04:32
Avatar de Lr_Darko  
Fecha de Ingreso: octubre-2008
Mensajes: 41
Antigüedad: 15 años, 6 meses
Puntos: 2
Exclamación Codeigniter: Clase Cart (implementar carro de compra)

Estoy loquísimo ya. La clase es súper sencilla de utilizar y no sé en qué puedo fallar.

Incluyo la librería "cart" librería en autoload.

Tengo un controlador llamado "carro". Tiene un método que se llama agregar_producto (que llama a un modelo que se encarga de comprobar y añadir el producto a la cesta) y otro método que es "compra" que muestra el contenido del carro llamando a una vista.

Controlador:
Código PHP:
<?php 
class Carro extends Controller {
    
    function 
__construct() {
        
parent::Controller();
        
//$datos['nombre'] = $this->session->userdata('nombre');
        //$this->load->view('cabecera_vista.html', $datos);
        
$this->load->model('carro_modelo');

    }
    
    function 
index()
    {
        
$this->compra(); 
    }
    
    function 
agregar_producto(){
        
        if (
$this->carro_modelo->agregarProductoValidado() == TRUE)
        {
            
$this->compra();
            
//redirect('home');
        
}
        else
        {
            echo 
"Producto no válido";
        }
    }
    
    function 
compra(){
        
$this->load->view('carro_compra_vista');
    }
}
# /* End of file cart.php */  
# /* Location: ./application/controllers/cart.php */
Modelo:
Código PHP:
<?php 

    
class Carro_modelo extends Model 
    

        function 
__construct()
        {
            
parent::Model();
        }
            

        function 
agregarProductoValidado(){
            
$id $this->input->post('id_producto');
            
$cantidad $this->input->post('cantidad');
            
            
$this->db->where('id_producto'$id);
            
$query $this->db->get('producto'1);
            
            
//Comprobar que el id coincide con un registro en la base de datos
            
if($query->num_rows 0)
            {  
                 
// ¡Tenemos un ganador!  
                   
$item  $query->row(); 
                   
                   
//Comprobamos si el precio está rebajado o no
                   
if (($item->pvp_rebajado != NULL) || ($item->pvp_rebajado != 0))
                {
                    
$pvp_total $item->pvp_rebajado;
                }else{
                    
$pvp_total $item->pvp;    
                }
                           
                   
// Crear un array con la info del producto  
                    
$data = array(  
                    
'id'      => $item->id_producto,  
                    
'qty'     => $cantidad,  
                    
'price'   => $pvp_total,  
                    
'name'    => $item->nombre  
                
);
                     
                
//Añadimos la información a la cesta de la compra usando su método insert
                
$this->cart->insert($data); 
                 return 
TRUE;  
               
             }else{  
             
// No se encontró nada  
                 
return FALSE;  
             }      
        }
    }
La vista está copiada de una página pero nunca pasa la comprobación del primer condicional if. Siempre me sale que está vacía después de añadir.
Vista:
Código PHP:
<?php if(!$this->cart->contents()):
        echo 
'No tienes ningún producto en la cesta.';
    else:
    
?>

    <?php echo form_open(''); ?>
    <table width="100%" cellpadding="0" cellspacing="0">
        <thead>
            <tr>
                <td>Cantidad</td>
                <td>Descripción</td>
                <td>Precio producto</td>
                <td>Sub-Total</td>
            </tr>
        </thead>
        <tbody>
            <?php $i 1?>
            <?php foreach($this->cart->contents() as $items): ?>

            <?php echo form_hidden('rowid[]'$items['rowid']); ?>
            <tr <?php if($i&1){ echo 'class="alt"'; }?>>
                  <td>
                      <?php echo form_input(array('name' => 'qty[]''value' => $items['qty'], 'maxlength' => '3''size' => '5')); ?>
                  </td>

                  <td><?php echo $items['name']; ?></td>

                  <td>&euro;<?php echo $this->cart->format_number($items['price']); ?></td>
                  <td>&euro;<?php echo $this->cart->format_number($items['subtotal']); ?></td>
              </tr>

              <?php $i++; ?>
            <?php endforeach; ?>

            <tr>
                <td</td>
                  <td></td>
                  <td><strong>Total</strong></td>
                  <td>&euro;<?php echo $this->cart->format_number($this->cart->total()); ?></td>
            </tr>
        </tbody>
    </table>

    <p><?php echo form_submit('''Update your Cart'); echo anchor('cart/empty_cart''Empty Cart''class="empty"');?></p>
    <p><small>If the quantity is set to zero, the item will be removed from the cart.</small></p>
    <?php
    
echo form_close();
    endif;
    
?>

Última edición por Lr_Darko; 08/07/2010 a las 04:51
  #2 (permalink)  
Antiguo 08/07/2010, 05:54
Avatar de Lr_Darko  
Fecha de Ingreso: octubre-2008
Mensajes: 41
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Codeigniter: Clase Cart (implementar carro de compra)

¡Joder es por la tilde!

El nombre no acepta tildes... uff la que me ha dado.
  #3 (permalink)  
Antiguo 08/07/2010, 19:25
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 18 años, 6 meses
Puntos: 890
Respuesta: Codeigniter: Clase Cart (implementar carro de compra)

Tienes que agregar esta regla para permitir caracteres especiales a los nombres-


/system/libraries/Cart.php

var $product_name_rules = '\.\:\-_ a-z0-9áéíóúñü';

No es de mi agrado tocar el core, pero es la solución más rápida que hay.

Me olvidada, para depurar errores fácilmente y ver todo lo que ocurre en la aplicacion deberias activar los logs en confg.php yo lo tengo asi
$config['log_threshold'] = 4;

Hubieras encontrado el error al instante.
Saludos
__________________
Drupal Argentina

Última edición por NUCKLEAR; 08/07/2010 a las 19:38
  #4 (permalink)  
Antiguo 09/07/2010, 03:38
Avatar de Lr_Darko  
Fecha de Ingreso: octubre-2008
Mensajes: 41
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Codeigniter: Clase Cart (implementar carro de compra)

Gracias, eso es lo que hice. Aunque para no tocar el core de codeigniter amplié la librería Cart usando MY_Cart y ahí es donde lo modifiqué.

Acabo de poner $config['log_threshold'] = 4;

Me has hecho la vida más fácil.

Etiquetas: cart, clase, compra, implementar, carrito
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:12.