Diferencia entre revisiones de «Usuario:ManuelRomero/php/smarty/cesta»
De WikiEducator
< Usuario:ManuelRomero | php
Línea 14: | Línea 14: | ||
*En la parte inferior tendremos el total de la cesta. | *En la parte inferior tendremos el total de la cesta. | ||
*En la siguiente imagen podemos ver cómo queda la cesta después de comprar 1 unidad de un producto y 3 de otros dos productos. | *En la siguiente imagen podemos ver cómo queda la cesta después de comprar 1 unidad de un producto y 3 de otros dos productos. | ||
− | [[imagen: cestaTienda.png|300px]] | + | [[imagen: cestaTienda.png|300px|center]]<br /> |
*Para gestionar la cesta tendremos un objeto de la clase cesta: '''''Cesta.php''''' | *Para gestionar la cesta tendremos un objeto de la clase cesta: '''''Cesta.php''''' | ||
*Por otro lado tenemos que modificar la plantilla de productos.tpl una platilla, según se indica en las líneas siguiente. | *Por otro lado tenemos que modificar la plantilla de productos.tpl una platilla, según se indica en las líneas siguiente. | ||
Línea 22: | Línea 22: | ||
*Par ver claro el escenario dibujamos el siguiente diagrama de uso | *Par ver claro el escenario dibujamos el siguiente diagrama de uso | ||
[[Archivo:CasosUso4.png|500px]] | [[Archivo:CasosUso4.png|500px]] | ||
− | *Explicación | + | *Explicación: |
− | # | + | #El usuario selecciona un nuevo producto |
#Se incorpora el nuevo producto en la cesta (Cesta.php, BD.php y Producto.php) | #Se incorpora el nuevo producto en la cesta (Cesta.php, BD.php y Producto.php) | ||
#Se exporta el objeto cesta para la plantilla cesta.tpl | #Se exporta el objeto cesta para la plantilla cesta.tpl | ||
Línea 38: | Línea 38: | ||
#get_productos()// Obtiene los artículos en la cesta | #get_productos()// Obtiene los artículos en la cesta | ||
#coste()// Obtiene el coste total de 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 | + | #vacia() // Devuelve true si la cesta está vacía |
#guarda_cesta()// Guarda la cesta de la compra en la sesión del usuario | #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. | #carga_cesta() // Recupera la cesta de la compra almacenada en la sesión del usuario. | ||
Línea 49: | Línea 49: | ||
class Cesta { | class Cesta { | ||
− | protected $productos = | + | protected $productos = []; |
− | + | protected $unidades = []; | |
//... | //... | ||
</source> | </source> | ||
− | + | ||
− | + | // Introduce un nuevo artículo en la cesta de la compra | |
public function nuevo_articulo($codigo) { | public function nuevo_articulo($codigo) { | ||
− | $producto = DB::obtieneProducto($codigo); | + | |
− | + | if ($this->unidades[$codigo] > 0) { | |
+ | $this->unidades[$codigo] ++; | ||
+ | } else { | ||
+ | $producto = DB::obtieneProducto($codigo); | ||
+ | $this->productos[] = $producto; | ||
+ | $this->unidades[$codigo] = 1; | ||
+ | } | ||
} | } | ||
− | + | ... | |
+ | <!-- | ||
// Obtiene los artículos en la cesta | // Obtiene los artículos en la cesta | ||
public function get_productos() { return $this->productos; } | public function get_productos() { return $this->productos; } |
Revisión de 09:22 7 abr 2017
Probando el ejemplo
- Puedes ver esta parte del ejercicio ejecutándose en la web:
http://manuel.infenlaces.com/dwes/tienda/TiendaCesta/login.php
Nuevas especificaciones
- En esta nueva versión vamos a añadir la parte de la cesta.
- Cuando seleccionemos un nuevo producto, añadiremos ese producto a la cesta.
- Para ello seleccionaremos o elegiremos productos de la lista de productos, y según los seleccionemos, se añadirán a la cesta.
- Esto modificará la plantilla; Lo que antes solo eran los productos, ahora nos aparecerán en la parte derecha constituyendo la cesta de la compra.
- La cesta contendrá un listado de todos los productos que actualmente hemos comprado.
- De cada producto anotaremos la cantidad de productos incorporados, así como su precio
- En la parte inferior tendremos el total de la cesta.
- En la siguiente imagen podemos ver cómo queda la cesta después de comprar 1 unidad de un producto y 3 de otros dos productos.
- Para gestionar la cesta tendremos un objeto de la clase cesta: Cesta.php
- Por otro lado tenemos que modificar la plantilla de productos.tpl una platilla, según se indica en las líneas siguiente.
Explicación del funcionamiento
- El siguiente diagrama de uso expone el funcionamiento de la nueva versión
- Par ver claro el escenario dibujamos el siguiente diagrama de uso
- Explicación:
- El usuario selecciona un nuevo producto
- Se incorpora el nuevo producto en la cesta (Cesta.php, BD.php y Producto.php)
- Se exporta el objeto cesta para la plantilla cesta.tpl
- Se exporta el usuario y lista de productos para la plantilla listaProductos.tpl
- Se carga la plantilla productos.tpl que incluirá las platillas cesta.tpl y listaProductos.tpl.
- En esta explicación ya hemos detallado los nuevos ficheros que vamos a incorporar en nuestro desarrollo, los cuales se exponen a continuación
Clases
- Cesta.php
- Vamos a crear una clase Cesta.php
- 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 = []; protected $unidades = []; //...
// Introduce un nuevo artículo en la cesta de la compra public function nuevo_articulo($codigo) {
if ($this->unidades[$codigo] > 0) { $this->unidades[$codigo] ++; } else { $producto = DB::obtieneProducto($codigo); $this->productos[] = $producto; $this->unidades[$codigo] = 1; } } ...
- Dentro de esta clase necesitamos acceder a la base de datos
- Esto implica que incluyamos incluyamos en el fichero DB.php, así como añadir nuevo método en la clase DB.php.
- Dentro de la clase Cesta.php, 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 de producto nos retorna un objeto de la clase producto.
- DB.php
- Como acabamos de ver a esta clase le añadimos un nuevo método
- 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) {
Plantillas
- Tenemos que modificar la plantilla de productos.tpl, para añadir la presentación de los datos de la cesta
- Para hacerlo más cómodo vamos a crear una plantilla contenedora que será productos.tpl, y en ella incluiremos por un lado la lista de productos que irá en una plantilla llamadda listaProductos.tpl, y los datos de la cesta que los aportará una plantilla llamada cesta.tpl
- Por lo tanto ahora tendremos tres ficheros para estas plantillas
- productos.tpl
- listaProductos.tpl
- cesta.tpl
- Las palntillas listaProductos y cesta las cargaremos en la plantilla de productos.tpl, usando la instrución de smarty include file=plantilla.tpl.
{include file="cesta.tpl"}
{include file="listaproducto.tpl"}
<form action='logoff.php' method='post'> <input type='submit' name='desconectar' value='Desconectar usuario {$usuario}'/> </form>
</div> </body> </html> </source>
-->
- listaProductos.tpl
- Tendría el siguiente código
{foreach from=$productos item=producto} ......
La lógica o el código
- Ahora vamos a ver que hemos tenido que modificar en el código
- La parte de código la centramos en el fichero producto.php
- Por un lado debemos cargar un objeto cesta con el contenido de la cesta
- El contenido de la cesta la guardamos en una variable de sesión
El código que implementamos para ello sería
$cesta = Cesta::carga_cesta(); .....
- Con esto ya tendríamos terminada la penúltima versión de nuestro trabajo
- No olvidéis subir la cesta.png para que aparezca la imagen