Diferencia entre revisiones de «Usuario:ManuelRomero/php/smarty/cesta»
De WikiEducator
< Usuario:ManuelRomero | php
| Línea 48: | Línea 48: | ||
</html> | </html> | ||
</source> | </source> | ||
| + | ===Clases=== | ||
| + | *Vamos a crear una clase cesta | ||
| + | *Una cesta va a ser un conjunto de productos que hemos comprado. | ||
| + | *Además podremos hacer las siguientes acciones: | ||
| + | #nuevo_articulo($codigo) //Añande un nuevo producto a la cesta | ||
| + | #get_productos()// Obtiene los artículos en la cesta | ||
| + | #coste()// Obtiene el coste total de los artículos en la cesta | ||
| + | #vacia // Devuelve true si la cesta está vacía | ||
| + | #guarda_cesta()// Guarda la cesta de la compra en la sesión del usuario | ||
| + | #carga_cesta() // Recupera la cesta de la compra almacenada en la sesión del usuario | ||
| + | Todos estos métodos los obtenemos a partir de las especificaciones o ejercicio realizado anteriormente | ||
| + | *El objeto Cesta queda como se expresa en la siguiente imagen | ||
| + | [[Archivo:cesta.png]] | ||
| + | <source lang=php> | ||
| + | <?php | ||
| + | require_once('DB.php'); | ||
| + | |||
| + | class Cesta { | ||
| + | protected $productos = array(); | ||
| + | |||
| + | // Introduce un nuevo artículo en la cesta de la compra | ||
| + | public function nuevo_articulo($codigo) { | ||
| + | $producto = DB::obtieneProducto($codigo); | ||
| + | $this->productos[] = $producto; | ||
| + | } | ||
| + | |||
| + | // Obtiene los artículos en la cesta | ||
| + | public function get_productos() { return $this->productos; } | ||
| + | |||
| + | // Obtiene el coste total de los artículos en la cesta | ||
| + | public function get_coste() { | ||
| + | $coste = 0; | ||
| + | foreach($this->productos as $p) $coste += $p->getPVP(); | ||
| + | return $coste; | ||
| + | } | ||
| + | |||
| + | // Devuelve true si la cesta está vacía | ||
| + | public function vacia() { | ||
| + | if(count($this->productos) == 0) return true; | ||
| + | return false; | ||
| + | } | ||
| + | |||
| + | // Guarda la cesta de la compra en la sesión del usuario | ||
| + | public function guarda_cesta() { $_SESSION['cesta'] = $this; } | ||
| + | |||
| + | // Recupera la cesta de la compra almacenada en la sesión del usuario | ||
| + | public static function carga_cesta() { | ||
| + | if (!isset($_SESSION['cesta'])) return new CestaCompra(); | ||
| + | else return $_SESSION['cesta']; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | ?> | ||
| + | </source> | ||
| + | ;Vemos que hemos usado acceso a la base de datos | ||
| + | *En el método nuevo artículo necesitamos recuperar los datos de un artículo, para ello creamos el método obtieneProducto($codigo) en la clase DB.php | ||
| + | *Este método a partir de un código nos retorna un objeto de la clase producto | ||
| + | *Con ello la clase DB.php definitiva quedaría | ||
| + | [[Archivo:DB3_.php]] | ||
| + | *El código de este método | ||
| + | <source lang=php> | ||
| + | /*======================obtieneProducto ($codigo)====================================== | ||
| + | Accion: obtiene los datos de un determinado producto cuyo codigo pasamos como argumento | ||
| + | Parámetros: $codigo es el codigo del producto cuyos datos queremos | ||
| + | Retorna un objeto de la clase producto con sus datos(cod, nombre_corto y PVP | ||
| + | * ***********************************************************************************************/ | ||
| + | public static function obtieneProducto($codigo) { | ||
| + | //.... | ||
| + | </source> | ||
| + | <!-- | ||
| + | |||
| + | $valores = array('cod'=>$codigo); | ||
| + | $sql = <<<FIN | ||
| + | SELECT cod, nombre_corto, nombre, PVP | ||
| + | FROM usuarios | ||
| + | WHERE cod = :cod | ||
| + | FIN; | ||
| + | $resultado = self::ejecutaConsulta ($sql,$valores); | ||
| + | $producto = null; | ||
| + | if(isset($resultado)) { | ||
| + | $row = $resultado->fetch(); | ||
| + | $producto = new Producto($row); | ||
| + | } | ||
| + | return $producto; | ||
| + | } | ||
| + | |||
| + | </source> | ||
| + | --> | ||
Revisión de 06:17 12 ene 2015
Cesta
- Ahora deberemos ver o añadir la cesta
- Podremos seleccionar o elegir productos y según añadamos se añadirán a la cesta
- Esto aparecer en la pantalla de productos
- Para mejorar el código y siguiendo las especificaciones planteadas, vamos crear dos plantillas
- listaProductos.tpl
- cesta.tpl
- y ambas plantillas las cargaremos en la plantilla de productos.tpl.
- La plantilla productos.ptl quedará de la siguiente manera
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Listado de Productos con Plantillas</title> <link href="tienda.css" rel="stylesheet" type="text/css"> </head> <body class="pagproductos"> <div id="contenedor"> <div id="encabezado"> <h1>Listado de productos</h1> </div> <!-- Dividir en varios templates --> <div id=""contenedor> <div id="cesta"> {include file="cesta.tpl"} </div> </div> <div id=""contenedor> <div id="productos"> {include file="listaproducto.tpl"} </div> </div> <br class="divisor" /> <div id="pie"> <form action='logoff.php' method='post'> <input type='submit' name='desconectar' value='Desconectar usuario {$usuario}'/> </form> </div> </div> </body> </html>
Clases
- Vamos a crear una clase cesta
- Una cesta va a ser un conjunto de productos que hemos comprado.
- Además podremos hacer las siguientes acciones:
- nuevo_articulo($codigo) //Añande un nuevo producto a la cesta
- get_productos()// Obtiene los artículos en la cesta
- coste()// Obtiene el coste total de los artículos en la cesta
- vacia // Devuelve true si la cesta está vacía
- guarda_cesta()// Guarda la cesta de la compra en la sesión del usuario
- carga_cesta() // Recupera la cesta de la compra almacenada en la sesión del usuario
Todos estos métodos los obtenemos a partir de las especificaciones o ejercicio realizado anteriormente
- El objeto Cesta queda como se expresa en la siguiente imagen
<?php require_once('DB.php'); class Cesta { protected $productos = array(); // Introduce un nuevo artículo en la cesta de la compra public function nuevo_articulo($codigo) { $producto = DB::obtieneProducto($codigo); $this->productos[] = $producto; } // Obtiene los artículos en la cesta public function get_productos() { return $this->productos; } // Obtiene el coste total de los artículos en la cesta public function get_coste() { $coste = 0; foreach($this->productos as $p) $coste += $p->getPVP(); return $coste; } // Devuelve true si la cesta está vacía public function vacia() { if(count($this->productos) == 0) return true; return false; } // Guarda la cesta de la compra en la sesión del usuario public function guarda_cesta() { $_SESSION['cesta'] = $this; } // Recupera la cesta de la compra almacenada en la sesión del usuario public static function carga_cesta() { if (!isset($_SESSION['cesta'])) return new CestaCompra(); else return $_SESSION['cesta']; } } ?>
- Vemos que hemos usado acceso a la base de datos
- En el método nuevo artículo necesitamos recuperar los datos de un artículo, para ello creamos el método obtieneProducto($codigo) en la clase DB.php
- Este método a partir de un código nos retorna un objeto de la clase producto
- Con ello la clase DB.php definitiva quedaría
- El código de este método
/*======================obtieneProducto ($codigo)====================================== Accion: obtiene los datos de un determinado producto cuyo codigo pasamos como argumento Parámetros: $codigo es el codigo del producto cuyos datos queremos Retorna un objeto de la clase producto con sus datos(cod, nombre_corto y PVP * ***********************************************************************************************/ public static function obtieneProducto($codigo) { //....
