Muy buenas a tod@s!
Os pongo está consulta para ver si me podéis echar una mano.
Soy nuevo en codeigniter. Hace muy poco que lo estoy usando y me he planteado un proyecto que incluye un carrito de compra. Pero estoy teniendo un problema.
Por ahora tengo dos productos para hacer pruebas.
Cuando los introduzco no hay ningún problema. Y si los actualizo no lo hay tampoco... la primera vez. Es decir, puedo poner un producto o los dos. Pero después de que haga una actualización, me si quiero volver a actualizar me falla.
La cantidad de advertencias que me da el navegador, es mayor cuanto más alta es la cantidad que quiero incrementar el producto.
Mis códigos son los siguientes:
modelo de la cesta o el carro (carro.php):
Código PHP:
<?php
Class Carro_model extends CI_Model
{
public function agregar_al_carro($id)
{
$pagina = 'carro';
$this->load->model('usuarios_model');
$this->load->model('productos_model');
$producto = array(
'id' => $this->input->post('id'),
'qty' => 1,
'price' => $this->input->post('precio'),
'name' => $this->input->post('nombre'),
'options' => array('description' => $this->input->post('nombre'))
);
$data['carro'] = $this->cart->insert($producto);
}
public function vaciar_carro()
{
$this->cart->destroy();
}
public function actualizar_carro()
{
// Obtenemos el número total de items en el carro
$total = $this->cart->total_items();
// Seleccionamos la información que necesitamos
$item = $this->input->post('rowid');
$qty = $this->input->post('qty');
// Hacemos un loop para acutalizarla
for($i = 0; $i < $total; $i++)
{
// Creamos un array de productos con sus rowid y cantidades.
$data = array(
'rowid' => $item[$i],
'qty' => $qty[$i]
);
// Actualizamos el carro con la nueva información.
$this->cart->update($data);
}
}
}
Controlador del carro (carro.php)
Código PHP:
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
session_start(); //we need to call PHP's session object to access it through CI
class Carro extends CI_Controller
{
function __construct()
{
parent::__construct();
}
function index()
{
$pagina = 'carro';
$this->load->model('usuarios_model');
$this->load->model('productos_model');
$this->load->model('carro_model');
$session_data = $this->session->userdata('logged_in');
$data['productos'] = $this->productos_model->obtener_productos();
$data['username'] = $session_data['username'];
if ( ! file_exists('application/views/publico/' . $pagina . '.php'))
{
// Oh-oh... no tenemos una pagina para esto!
show_404();
}
// Capitaliza la primera letra
$data['titulo'] = ucfirst($pagina);
$this->load->view('plantillas/publico_cabecera', $data);
$this->load->view('publico/' . $pagina, $data);
}
public function agregar_al_carro($id)
{
$pagina = 'carro';
$this->load->model('usuarios_model');
$this->load->model('productos_model');
$this->load->model('carro_model');
$this->carro_model->agregar_al_carro($id);
redirect('carro', 'refresh');
}
public function vaciar_carro()
{
$this->load->model('carro_model');
$this->carro_model->vaciar_carro();
redirect('inicio', 'refresh');
}
public function actualizar_carro()
{
$this->load->model('usuarios_model');
$this->load->model('productos_model');
$this->load->model('carro_model');
$this->carro_model->actualizar_carro();
// Volvemos al carro
redirect('carro', 'refresh');
}
}
Vista (carro.php):
Código PHP:
<?php if(!$this->cart->contents()):
echo 'Todavía no has añadido ningún producto.';
else:
?>
<?php echo form_open('carro/actualizar_carro'); ?>
<table width="100%" cellpadding="0" cellspacing="0">
<thead>
<tr>
<td>Cantidad</td>
<td>Descripción</td>
<td>Precio</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>€<?php echo $this->cart->format_number($items['price']); ?></td>
<td>€<?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>€<?php echo $this->cart->format_number($this->cart->total()); ?></td>
</tr>
</tbody>
</table>
<p><?php echo form_submit('', 'Actuarlizar Carro'); echo anchor('carro/vaciar_carro', 'Vaciar Carro', 'class="empty"');?></p>
<p><small>Si la cantidad introducida en un producto es 0, el item será borrado.</small></p>
<?php
echo form_close();
endif;
?>
Bueno, creo que esa es toda la información que puedo daros.
Si os hiciese falta alguna cosa más, pedídmelo. Vale??
Muchas gracias!
Un saludo,
SeiyaJapon.