Usuario:ManuelRomero/php/smarty/producto

De WikiEducator
Saltar a: navegación, buscar



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() {
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
 
//.....
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>