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

De WikiEducator
Saltar a: navegación, buscar
Línea 3: Línea 3:
 
===Cesta===
 
===Cesta===
 
*Ahora deberemos ver o añadir la cesta  
 
*Ahora deberemos ver o añadir la cesta  
*Podremos seleccionar o elegir productos y según añadamos se añadirán a la cesta
+
*Podremos seleccionar o elegir productos de la lista de productos,  y según los seleccionemos,  se añadirán a la cesta.
*Esto aparecer en la pantalla de productos
+
*La cesta con su contenido, aparecerá en la pantalla de productos.
 
*Para mejorar el código y siguiendo las especificaciones planteadas, vamos crear dos plantillas
 
*Para mejorar el código y siguiendo las especificaciones planteadas, vamos crear dos plantillas
 
#listaProductos.tpl
 
#listaProductos.tpl
 
#cesta.tpl
 
#cesta.tpl
 
*y ambas plantillas las cargaremos en la plantilla de productos.tpl.
 
*y ambas plantillas las cargaremos en la plantilla de productos.tpl.
*La plantilla productos.ptl quedará de la siguiente manera
+
*La plantilla productos.tpl, usando la instrución de smarty '''''include file=plantilla.tpl'''''.
 +
*El código quedará de la siguiente manera
 
<source lang=php>
 
<source lang=php>
 
<!DOCTYPE html>
 
<!DOCTYPE html>
Línea 49: Línea 50:
 
</source>
 
</source>
 
===Clases===
 
===Clases===
*Vamos a crear una clase cesta
+
*Vamos a crear una clase '''''Cesta.php'''''
 
*Una cesta va a ser un conjunto de productos que hemos comprado.
 
*Una cesta va a ser un conjunto de productos que hemos comprado.
 
*Además podremos hacer las siguientes acciones:
 
*Además podremos hacer las siguientes acciones:
Línea 57: Línea 58:
 
#vacia // Devuelve true si la cesta está vacía
 
#vacia // Devuelve true si la cesta está vacía
 
#guarda_cesta()// Guarda la cesta de la compra en la sesión del usuario
 
#guarda_cesta()// Guarda la cesta de la compra en la sesión del usuario
#carga_cesta() // Recupera la cesta de la compra almacenada en la sesión del usuario
+
#carga_cesta() // Recupera la cesta de la compra almacenada en la sesión del usuario.
Todos estos métodos los obtenemos a partir de las especificaciones o ejercicio realizado anteriormente
+
*Todos estos métodos los obtenemos a partir de las especificaciones o ejercicio realizado anteriormente.
 
*El objeto Cesta queda como se expresa en la siguiente imagen
 
*El objeto Cesta queda como se expresa en la siguiente imagen
 
[[Archivo:Cesta.png]]
 
[[Archivo:Cesta.png]]
Línea 86: Línea 87:
 
     // Devuelve true si la cesta está vacía
 
     // Devuelve true si la cesta está vacía
 
     public function vacia() {
 
     public function vacia() {
         if(count($this->productos) == 0) return true;
+
         if(count($this->productos) == 0)
 +
          return true;
 
         return false;
 
         return false;
 +
      // alternativa  return !(count($this->productos));
 
     }
 
     }
 
      
 
      
    // Guarda la cesta de la compra en la sesión del usuario
+
  // Guarda la cesta de la compra en uns variable de sesión
     public function guarda_cesta() { $_SESSION['cesta'] = $this; }
+
     public function guarda_cesta() {  
 +
                  $_SESSION['cesta'] = $this;
 +
    }
 
      
 
      
     // Recupera la cesta de la compra almacenada en la sesión del usuario
+
     // Recupera la cesta de la compra almacenada en la variable de sesión . Si no existía crea una variable de sesión con una instancia del objeto Cesta
 
     public static function carga_cesta() {
 
     public static function carga_cesta() {
         if (!isset($_SESSION['cesta'])) return new CestaCompra();
+
         if (!isset($_SESSION['cesta']))  
         else return $_SESSION['cesta'];
+
            return new CestaCompra();
 +
         else
 +
          return $_SESSION['cesta'];
 
     }
 
     }
 
}
 
}
Línea 102: Línea 109:
 
?>
 
?>
 
</source>
 
</source>
;Vemos que hemos usado acceso a la base de datos
+
*Dentro de esta clase necesitamos acceder a la base de datos
*En el método nuevo artículo necesitamos recuperar los datos de un artículo, para ello creamos el método obtieneProducto($codigo) en la clase DB.php
+
*Esto implica que incluyamos incluyamos en el fichero '''''DB.php''''', así como añadir nuevo método en la clase DB.php.
*Este método a partir de un código nos retorna un objeto de la clase producto
+
*Dentro de la clase '''''Cesta.php''''', en el método nuevo artículo necesitamos recuperar los datos de un artículo, para ello creamos el método obtieneProducto($codigo) en la clase DB.php
 +
*Este método a partir de un código de producto nos retorna un objeto de la clase producto
 
*Con ello la clase DB.php definitiva quedaría
 
*Con ello la clase DB.php definitiva quedaría
 
[[Archivo:DB3_.png]]
 
[[Archivo:DB3_.png]]
Línea 133: Línea 141:
 
</source>
 
</source>
  
;Las plantillas
+
===Las plantillas===
 
*Ahora debemos de escribir las plantillas que van a componer la plantilla de producto.tpl
 
*Ahora debemos de escribir las plantillas que van a componer la plantilla de producto.tpl
 
*Par ver claro el escenario dibujamos el siguiente diagrama de uso
 
*Par ver claro el escenario dibujamos el siguiente diagrama de uso
 +
[[Archivo:CasosUso4.png]]
 +
*Explicacion
 +
#Usuario selecciona un nuevo producto
 +
#Se incorpora el nuevo producto en la cesta (Cesta.php, BD.php y Producto.php)
 +
#Se exporta el objeto cesta para la plantilla cesta.tpl
 +
#Se exporta el usuario y lista de productos para la plantilla listaProductos.tpl
 +
#Se carga la plantilla productos.tpl que incluirá las platillas cesta.tpl y listaProductos.tpl
  
  
;listaPorductos,tpl
+
;listaPorductos.tpl
 
*Esta plantilla es la antigua de producto.tpl;
 
*Esta plantilla es la antigua de producto.tpl;
 
*En ella tenemos un formulario por cada producto
 
*En ella tenemos un formulario por cada producto
Línea 144: Línea 159:
 
*Este código se recogerá en el fichero de código producto.php.
 
*Este código se recogerá en el fichero de código producto.php.
 
<source lang=php>
 
<source lang=php>
 
+
    {foreach from=$productos item=producto}
 +
        <p><form id='{$producto->getcodigo()}' action='producto.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}
 +
</source>
 +
;cesta.tpl
 +
Contendrá los diferentes productos que actualmente tengo incorporados en la cesta de compra
 +
*El código
 +
<source lang=php>
 +
<!DOCTYPE html>
 +
<html>
 +
<head>
 +
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 +
  <title>Cesta de la Compra con Plantillas</title>
 +
  <link href="tienda.css" rel="stylesheet" type="text/css">
 +
</head>
 +
<body class="pagcesta">
 +
  <h3><img src="cesta.png" alt="Cesta" width="24" height="21"> Cesta</h3>
 +
  <hr />
 +
    {foreach from=$productoscesta item=producto}
 +
        <p>
 +
            <span class='codigo'>{$producto->getcodigo()}</span>
 +
            <span class='nombre'>{$producto->getnombre()}</span>
 +
            <span class='precio'>{$producto->getPVP()}</span>
 +
        </p>
 +
    {/foreach}
 +
    <hr />
 +
</body>
 +
</html></html>
 
</source>
 
</source>

Revisión de 21:46 14 ene 2015



Cesta

  • Ahora deberemos ver o añadir la cesta
  • Podremos seleccionar o elegir productos de la lista de productos, y según los seleccionemos, se añadirán a la cesta.
  • La cesta con su contenido, aparecerá en la pantalla de productos.
  • Para mejorar el código y siguiendo las especificaciones planteadas, vamos crear dos plantillas
  1. listaProductos.tpl
  2. cesta.tpl
  • y ambas plantillas las cargaremos en la plantilla de productos.tpl.
  • La plantilla productos.tpl, usando la instrución de smarty include file=plantilla.tpl.
  • El código quedará de la siguiente manera
<!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>
 
  <!-- Dividir en varios templates -->
  <div id=""contenedor>
     <div id="cesta">      
         {include file="cesta.tpl"}
     </div>
  </div>
  <div id=""contenedor>
     <div id="productos">
        {include file="listaproducto.tpl"}
     </div>
</div>     
 
  <br class="divisor" />
  <div id="pie">
    <form action='logoff.php' method='post'>
        <input type='submit' name='desconectar' value='Desconectar usuario {$usuario}'/>
    </form>        
  </div>
</div>
</body>
</html>

Clases

  • Vamos a crear una clase Cesta.php
  • Una cesta va a ser un conjunto de productos que hemos comprado.
  • Además podremos hacer las siguientes acciones:
  1. nuevo_articulo($codigo) //Añande un nuevo producto a la cesta
  2. get_productos()// Obtiene los artículos en la cesta
  3. coste()// Obtiene el coste total de los artículos en la cesta
  4. vacia // Devuelve true si la cesta está vacía
  5. guarda_cesta()// Guarda la cesta de la compra en la sesión del usuario
  6. carga_cesta() // Recupera la cesta de la compra almacenada en la sesión del usuario.
  • Todos estos métodos los obtenemos a partir de las especificaciones o ejercicio realizado anteriormente.
  • El objeto Cesta queda como se expresa en la siguiente imagen

Cesta.png

<?php
require_once('DB.php');
 
class Cesta {
    protected $productos = array();
 
    // Introduce un nuevo artículo en la cesta de la compra
    public function nuevo_articulo($codigo) {
        $producto = DB::obtieneProducto($codigo);
        $this->productos[] = $producto;
    }
 
    // Obtiene los artículos en la cesta
    public function get_productos() { return $this->productos; }
 
    // Obtiene el coste total de los artículos en la cesta
    public function get_coste() {
        $coste = 0;
        foreach($this->productos as $p) $coste += $p->getPVP();
        return $coste;
    }
 
    // Devuelve true si la cesta está vacía
    public function vacia() {
        if(count($this->productos) == 0)
           return true;
        return false;
       // alternativa  return !(count($this->productos));
    }
 
   // Guarda la cesta de la compra en uns variable de sesión
    public function guarda_cesta() { 
                  $_SESSION['cesta'] = $this;
    }
 
    // Recupera la cesta de la compra almacenada en la variable de sesión . Si no existía crea una variable de sesión con una instancia del objeto Cesta
    public static function carga_cesta() {
        if (!isset($_SESSION['cesta'])) 
            return new CestaCompra();
        else
           return $_SESSION['cesta'];
    }
}
 
?>
  • Dentro de esta clase necesitamos acceder a la base de datos
  • Esto implica que incluyamos incluyamos en el fichero DB.php, así como añadir nuevo método en la clase DB.php.
  • Dentro de la clase Cesta.php, en el método nuevo artículo necesitamos recuperar los datos de un artículo, para ello creamos el método obtieneProducto($codigo) en la clase DB.php
  • Este método a partir de un código de producto nos retorna un objeto de la clase producto
  • Con ello la clase DB.php definitiva quedaría

DB3 .png

  • El código de este método
 /*======================obtieneProducto ($codigo)======================================
    Accion: obtiene los datos de un determinado producto cuyo codigo pasamos como argumento
    Parámetros: $codigo es el codigo del producto cuyos datos queremos
    Retorna  un objeto de la clase producto con sus datos(cod, nombre_corto y PVP 
 * ***********************************************************************************************/   
    public static function obtieneProducto($codigo) {
 
        $valores = array('cod'=>$codigo);
        $sql = <<<FIN
        SELECT cod, nombre_corto, nombre, PVP
        FROM usuarios 
        WHERE cod = :cod
FIN;
        $resultado = self::ejecutaConsulta ($sql,$valores);
        $producto = null;
	if(isset($resultado)) {
            $row = $resultado->fetch();
            $producto = new Producto($row);
	}
        return $producto;    
    }

Las plantillas

  • Ahora debemos de escribir las plantillas que van a componer la plantilla de producto.tpl
  • Par ver claro el escenario dibujamos el siguiente diagrama de uso

CasosUso4.png

  • Explicacion
  1. Usuario selecciona un nuevo producto
  2. Se incorpora el nuevo producto en la cesta (Cesta.php, BD.php y Producto.php)
  3. Se exporta el objeto cesta para la plantilla cesta.tpl
  4. Se exporta el usuario y lista de productos para la plantilla listaProductos.tpl
  5. Se carga la plantilla productos.tpl que incluirá las platillas cesta.tpl y listaProductos.tpl


listaPorductos.tpl
  • Esta plantilla es la antigua de producto.tpl;
  • En ella tenemos un formulario por cada producto
  • Cuando presionemos un click, invocaremos al fichero producto.php con la intención de añadir ese producto a la cesta
  • Este código se recogerá en el fichero de código producto.php.
    {foreach from=$productos item=producto}
        <p><form id='{$producto->getcodigo()}' action='producto.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}
cesta.tpl

Contendrá los diferentes productos que actualmente tengo incorporados en la cesta de compra

  • El código
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Cesta de la Compra con Plantillas</title>
  <link href="tienda.css" rel="stylesheet" type="text/css">
</head>
<body class="pagcesta">
   <h3><img src="cesta.png" alt="Cesta" width="24" height="21"> Cesta</h3>
   <hr />
    {foreach from=$productoscesta item=producto}
        <p>
            <span class='codigo'>{$producto->getcodigo()}</span>
            <span class='nombre'>{$producto->getnombre()}</span>
            <span class='precio'>{$producto->getPVP()}</span>
        </p>
    {/foreach}
    <hr />
</body>
</html></html>