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

De WikiEducator
Saltar a: navegación, buscar
Línea 48: Línea 48:
 
</html>
 
</html>
 
</source>
 
</source>
 +
===Clases===
 +
*Vamos a crear una clase cesta
 +
*Una cesta va a ser un conjunto de productos que hemos comprado.
 +
*Además podremos hacer las siguientes acciones:
 +
#nuevo_articulo($codigo) //Añande un nuevo producto a la cesta
 +
#get_productos()// Obtiene los artículos en la cesta
 +
#coste()// Obtiene el coste total de los artículos en la cesta
 +
#vacia // Devuelve true si la cesta está vacía
 +
#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
 +
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
 +
[[Archivo:cesta.png]]
 +
<source lang=php>
 +
<?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;
 +
    }
 +
   
 +
    // Guarda la cesta de la compra en la sesión del usuario
 +
    public function guarda_cesta() { $_SESSION['cesta'] = $this; }
 +
   
 +
    // Recupera la cesta de la compra almacenada en la sesión del usuario
 +
    public static function carga_cesta() {
 +
        if (!isset($_SESSION['cesta'])) return new CestaCompra();
 +
        else return $_SESSION['cesta'];
 +
    }
 +
}
 +
 +
?>
 +
</source>
 +
;Vemos que hemos usado acceso 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
 +
*Este método a partir de un código nos retorna un objeto de la clase producto
 +
*Con ello la clase DB.php definitiva quedaría
 +
[[Archivo:DB3_.php]]
 +
*El código de este método
 +
<source lang=php>
 +
/*======================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) {
 +
//....
 +
</source>
 +
<!--
 +
 +
        $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;   
 +
    }
 +
   
 +
</source>
 +
-->

Revisión de 19:17 12 ene 2015



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
  • Esto 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.ptl 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
  • 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;
    }
 
    // Guarda la cesta de la compra en la sesión del usuario
    public function guarda_cesta() { $_SESSION['cesta'] = $this; }
 
    // Recupera la cesta de la compra almacenada en la sesión del usuario
    public static function carga_cesta() {
        if (!isset($_SESSION['cesta'])) return new CestaCompra();
        else return $_SESSION['cesta'];
    }
}
 
?>
Vemos que hemos usado acceso 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
  • Este método a partir de un código nos retorna un objeto de la clase producto
  • Con ello la clase DB.php definitiva quedaría

Archivo:DB3 .php

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