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>€<?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('', '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;
?>