Usuario:ManuelRomero/php/smarty/producto

De WikiEducator
Saltar a: navegación, buscar


__NTOC__

Probando el ejemplo

  • Puedes ver esta parte del ejercicio ejecutándose en la web:
http://www.manuel.infenlaces.com/TiendaLogin/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 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

DB2 .png

  • 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() {
 
 
        $sql = "SELECT cod, nombre_corto, nombre, PVP FROM producto;";
        $resultado = self::ejecutaConsulta ($sql);
        $productos = array();
 
	if($resultado) {
            // Añadimos un elemento por cada producto obtenido
            while ($row=$resultado->fetch()) {
                $productos[] = new Producto($row);
            }
	}
 
        return $productos;
    }
La clase Producto.php

Producto.png 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
 
//.....
 
$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
<!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>