Usuario:ManuelRomero/php/smarty/producto
De WikiEducator
< Usuario:ManuelRomero | php
Revisión a fecha de 22:04 20 dic 2017; ManuelRomero (Discusión | contribuciones)
Probando el ejemplo
- Puedes ver esta parte del ejercicio ejecutándose en la web:
http://manuel.infenlaces.com/dwes/tienda/TiendaProductos/login.php
Lista productos
- Se trata de modificar tanto productos.php, como la plantilla productos.tpl, para obtener un listado de todos los productos
- Para ello también añadiremos métodos a la clase DB.php.
- A la vez crearemos la clase Producto.php para obtener de forma más cómoda cada producto como un objeto de la clase Producto a partir de cada fila de la consulta.
- Directamente vamos a escribir el código
- DB.php
- Debemos hacer una consulta que obtenga todos los productos
- Para ello añadiremos el método pública obtieneProductos() en la clase DB.php que quedará con lo que tenía
- escribimos el código
- La clase Producto.php
Esta clase implementa los atributos de la tabla productos y la posibilidad de obtener cada uno de sus atributos.
Producto.php |
---|
<?php class Producto { protected $codigo; protected $nombre; protected $nombre_corto; protected $PVP; public function getcodigo() {return $this->codigo; } public function getnombre() {return $this->nombre; } public function getnombrecorto() {return $this->nombre_corto; } public function getPVP() {return $this->PVP; } public function __construct($row) { $this->codigo = $row['cod']; $this->nombre = $row['nombre']; $this->nombre_corto = $row['nombre_corto']; $this->PVP = $row['PVP']; } } ?> |
- productos.php
- Esta parte del código simplemente accede a la base de datos y obtiene todos los productos
- Los productos quedan disponibles para la plantilla en una variable $productos que es un array asociativo
productos.php |
---|
<?php require_once('./../include/DB.php'); require_once('Smarty.class.php'); // Recuperamos la información de la sesión session_start(); .... // Y comprobamos que el usuario se haya autentificado, para evitar que puedan acceder directamente //a esta pagina sin pasar por el login if (!isset($_SESSION['usuario'])) die("Error - debe <a href='login.php'>identificarse</a>.<br />"); // Cargamos la librería de Smarty $smarty = new Smarty; $smarty->template_dir = '/web/smarty/tiendaSmarty2/templates/'; $smarty->compile_dir = '/web/smarty/tiendaSmarty2/templates_c/'; $smarty->config_dir = '/web/smarty/tiendaSmarty2/configs/'; $smarty->cache_dir = '/web/smarty/tiendaSmarty2/cache/'; // Ponemos a disposición de la plantilla los datos necesarios //..... $smarty->assign('usuario', $_SESSION['usuario']); $smarty->assign('productos', DB::obtieneProductos()); // Mostramos la plantilla $smarty->display('producto.tpl'); ?> |
- producto.tpl
- Esta es la plantilla de los productos
- En este caso debemos recorrer un array usando smarty
- Como se vio en la teoría la estructura from de smarty queda reflejada en el siguiente código
producto.tpl, la plantilla |
---|
<!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> <div id="productos"> {foreach from=$productos item=producto} <p> <form id='{$producto->getcodigo()}' action='productos.php' method='post'> <input type='hidden' name='cod' value='{$producto->getcodigo()}'/> <input type='submit' name='enviar' value='Añadir'/> {$producto->getnombrecorto()}: {$producto->getPVP()} euros.</form> </p> {/foreach} </div> </div> </body> </html> |
-->