Diferencia entre revisiones de «Usuario:ManuelRomero/php/smarty/producto»

De WikiEducator
Saltar a: navegación, buscar
(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 ()======================================
     ccion: obtiene un array con todos los productosde un determinado producto cuyo codigo pasamos como argumento
+
     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 11: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

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>