Diferencia entre revisiones de «Usuario:ManuelRomero/php/smarty/producto»
De WikiEducator
< Usuario:ManuelRomero | php
(→Lista productos) |
|||
Línea 13: | Línea 13: | ||
<source lang=php> | <source lang=php> | ||
+ | <?php | ||
+ | require_once('Producto.php'); | ||
+ | |||
+ | class DB { | ||
+ | |||
+ | //..... lo que había | ||
+ | |||
/*======================obtieneProducto ()====================================== | /*======================obtieneProducto ()====================================== | ||
− | + | Accion: obtiene un array con todos los productos de la bd. | |
Parámetros: | Parámetros: | ||
Retorna un array de objetos de productos con todos los productos | Retorna un array de objetos de productos con todos los productos | ||
Línea 38: | Línea 45: | ||
} | } | ||
--> | --> | ||
+ | ;La clase Producto.php | ||
+ | [[Archivo:producto.png]] | ||
+ | Esta clase implementa los atributos de la tabla productos y la posibilidad de obtener cada uno de sus atributos | ||
+ | <source lang=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']; | ||
+ | } | ||
+ | } | ||
+ | ?> | ||
+ | </source> | ||
+ | ;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 | ||
+ | *el código | ||
+ | |||
+ | <source lang=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 | ||
+ | |||
+ | //..... | ||
+ | |||
+ | </source> | ||
+ | <!-- | ||
+ | $smarty->assign('usuario', $_SESSION['usuario']); | ||
+ | $smarty->assign('productos', DB::obtieneProductos()); | ||
+ | |||
+ | // Mostramos la plantilla | ||
+ | $smarty->display('producto.tpl'); | ||
+ | ?> | ||
+ | </source> | ||
+ | --> | ||
+ | |||
+ | ;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 | ||
+ | <source lang=php> | ||
+ | <!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> | ||
+ | </source> |
Revisión de 12:40 12 ene 2015
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 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
<?php require_once('Producto.php'); class DB { //..... lo que había /*======================obtieneProducto ()====================================== Accion: obtiene un array con todos los productos de la bd. Parámetros: Retorna un array de objetos de productos con todos los productos * ***********************************************************************************************/ public static function obtieneProductos() {
- La clase Producto.php
Esta clase implementa los atributos de la tabla productos y la posibilidad de obtener cada uno de sus atributos
<?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
- el código
<?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 //.....
- 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
<!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>