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

De WikiEducator
Saltar a: navegación, buscar
 
(8 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
{{:Usuario:ManuelRomero/php/smarty/tienda/nav}}
 
{{:Usuario:ManuelRomero/php/smarty/tienda/nav}}
 
__NOTOC__
 
__NOTOC__
 +
{{MRM_Web|Title=Url para acceder a cada  práctica|
 +
http://manuel.infenlaces.com/dwes/practicas/tienda/
 +
}}
 +
<div class="parrafo">
 
===Enunciado inicial===
 
===Enunciado inicial===
 
==DESCRIPCIÓN DE LA PRÁCTICA DE LA TIENDA ON LINE==
 
==DESCRIPCIÓN DE LA PRÁCTICA DE LA TIENDA ON LINE==
Línea 9: Línea 13:
 
{{Plegable|hide|SQL estructura base de datos de Tienda|
 
{{Plegable|hide|SQL estructura base de datos de Tienda|
 
<source lang=sql>
 
<source lang=sql>
 +
-- Creamos la base de datos
 +
CREATE DATABASE `dwes` DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;
 +
USE `dwes`;
 +
-- Creamos las tablas
 +
CREATE TABLE `dwes`.`tienda` (
 +
`cod` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 +
`nombre` VARCHAR( 100 ) NOT NULL ,
 +
`tlf` VARCHAR( 13 ) NULL
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`usuarios` (
 +
`nombre` VARCHAR( 40 ) NOT NULL ,
 +
`pass`  VARCHAR( 200 ) NOT NULL
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`producto` (
 +
`cod` VARCHAR( 12 ) NOT NULL ,
 +
`nombre` VARCHAR( 200 ) NULL ,
 +
`nombre_corto` VARCHAR( 50 ) NOT NULL ,
 +
`descripcion` TEXT NULL ,
 +
`PVP` DECIMAL( 10, 2 ) NOT NULL ,
 +
`familia` VARCHAR( 6 ) NOT NULL ,
 +
PRIMARY KEY ( `cod` ) ,
 +
INDEX ( `familia` ) ,
 +
UNIQUE ( `nombre_corto` )
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`familia` (
 +
`cod` VARCHAR( 6 ) NOT NULL ,
 +
`nombre` VARCHAR( 200 ) NOT NULL ,
 +
PRIMARY KEY ( `cod` )
 +
) ENGINE = INNODB;
 +
CREATE TABLE `dwes`.`stock` (
 +
`producto` VARCHAR( 12 ) NOT NULL ,
 +
`tienda` INT NOT NULL ,
 +
`unidades` INT NOT NULL ,
 +
PRIMARY KEY ( `producto` , `tienda` )
 +
) ENGINE = INNODB;
 +
-- Creamos las claves foráneas
 +
ALTER TABLE `producto`
 +
ADD CONSTRAINT `producto_ibfk_1`
 +
FOREIGN KEY (`familia`) REFERENCES `familia` (`cod`)
 +
ON UPDATE CASCADE;
 +
ALTER TABLE `stock`
 +
ADD CONSTRAINT `stock_ibfk_2`
 +
FOREIGN KEY (`tienda`) REFERENCES `tienda` (`cod`)
 +
ON UPDATE CASCADE,
 +
ADD CONSTRAINT `stock_ibfk_1`
 +
FOREIGN KEY (`producto`) REFERENCES `producto` (`cod`)
 +
ON UPDATE CASCADE;
 +
CREATE USER `dwes`
 +
IDENTIFIED BY 'abc123.';
 +
GRANT ALL ON `dwes`.*
 +
TO `dwes`;
 
</source>
 
</source>
 
}}
 
}}
Línea 35: Línea 90:
 
('TV', 'Televisores'),
 
('TV', 'Televisores'),
 
('VIDEOC', 'Videocámaras');
 
('VIDEOC', 'Videocámaras');
+
INSERT INTO `usuarios` (`nombre`, `pass`) VALUES
 +
('dwes', md5('abc123.'));
 +
 
 
INSERT INTO `producto` (`cod`, `nombre`, `nombre_corto`, `descripcion`, `PVP`, `familia`) VALUES
 
INSERT INTO `producto` (`cod`, `nombre`, `nombre_corto`, `descripcion`, `PVP`, `familia`) VALUES
 
('3DSNG', NULL, 'Nintendo 3DS negro', 'Consola portátil de Nintendo que permitirá disfrutar de efectos 3D sin necesidad de gafas especiales, e incluirá retrocompatibilidad con el software de DS y de DSi.', '270.00', 'CONSOL'),
 
('3DSNG', NULL, 'Nintendo 3DS negro', 'Consola portátil de Nintendo que permitirá disfrutar de efectos 3D sin necesidad de gafas especiales, e incluirá retrocompatibilidad con el software de DS y de DSi.', '270.00', 'CONSOL'),
Línea 178: Línea 235:
 
*Es la parte de interfaz de cliente  
 
*Es la parte de interfaz de cliente  
 
*Normalmente cada parte php tendrá su plantilla, de modo que los ficheros php solo tienen código de control y de acceso y gestión de la base de datos
 
*Normalmente cada parte php tendrá su plantilla, de modo que los ficheros php solo tienen código de control y de acceso y gestión de la base de datos
;login.ptl
+
;login.tpl
 
;productos.tpl (listaProductos.tpl y productosCesta.tpl)
 
;productos.tpl (listaProductos.tpl y productosCesta.tpl)
 
;cesta.tpl
 
;cesta.tpl
 +
 
====NEGOCIO o LÓGICA====
 
====NEGOCIO o LÓGICA====
 
*5 plantillas tendremos 5 ficheros php, aunque esto no tendría que ser necesariamente así
 
*5 plantillas tendremos 5 ficheros php, aunque esto no tendría que ser necesariamente así
Línea 193: Línea 251:
 
*Vamos a hacer este ejercicio de forma incremental, realizando cada parte con el fin de ir asimilando bien los conceptos de plantillas y la separación de negocio o lógicay presentación.
 
*Vamos a hacer este ejercicio de forma incremental, realizando cada parte con el fin de ir asimilando bien los conceptos de plantillas y la separación de negocio o lógicay presentación.
 
#Login ==> Nos identificaremos para acceder al sitio web
 
#Login ==> Nos identificaremos para acceder al sitio web
#Porductos ==> Se visualizarán una lista de todos los productos
+
#Productos ==> Se visualizarán una lista de todos los productos
 
#Logoff ==> Tendremos la opción de desconectarnos
 
#Logoff ==> Tendremos la opción de desconectarnos
 
#Cesta ==> Aparecerá la posibilidad de ir incorporando nuevos elementos a la cesta
 
#Cesta ==> Aparecerá la posibilidad de ir incorporando nuevos elementos a la cesta
 
#Opciones de Cesta ==> Podremos o pagar y terminar la app o bien vaciar la cesta de la compra
 
#Opciones de Cesta ==> Podremos o pagar y terminar la app o bien vaciar la cesta de la compra
 +
#Descripción ==> Algunos productos pueden tener una descripción que querremos visualizar
 
*Cada una de estas cinco acciones deben de constituir una aplicación.
 
*Cada una de estas cinco acciones deben de constituir una aplicación.
 +
</div>

Última revisión de 22:57 5 feb 2020




Icon inter.gif
Url para acceder a cada práctica

http://manuel.infenlaces.com/dwes/practicas/tienda/


Enunciado inicial

DESCRIPCIÓN DE LA PRÁCTICA DE LA TIENDA ON LINE

  • Vamos a hacer un ejemplo práctico en el que vamos a usar sesiones
  • Consiste en implementar una tienda on line con los datos siguientes
Diagrama de entidades

DiagramaEntidadesTienda.png

que venimos trabajando
  • El siguiente diagrama muestra el escenario que queremos representar
  • El programa debe de ser en la medida de lo posible orientado a objetos (Ver en sección más abajo clases que se recomienda utilizar)

Tienda1.png

  • Explicación funcional de las páginas
Login (login.php).
Su función es autentificar al usuario de la aplicación web.
Todos los usuarios de la aplicación deberán autentificarse utilizando esta página antes de poder acceder al resto de páginas.
Listado de productos (productos.php).
Presenta un listado de los productos de la tienda, y permite al usuario seleccionar aquellos que va a comprar.
Cesta de compra (cesta.php).
Muestra un resumen de los productos escogidos por el usuario para su compra y da acceso a la página de pago.
Pagar (pagar.php).
Una vez confirmada la compra, la última página debería ser la que permitiera al usuario escoger el método de pago y la forma de envío.
En esta aplicación simplemente mostrará un mensaje de tipo "Gracias por su compra" y ofrecerá un enlace para comenzar una nueva compra.
Logoff (logoff.php).
Esta página desconecta al usuario de la aplicación y redirige al usuario de forma automática a la pantalla de autentificación.
No muestra ninguna información en pantalla, por lo que no es visible para el usuario.
  • Para realizar esta práctiva vamos a utilizar la siguiente hoja de estilo, disponible en un fichero puesto en el moodle
  • Observa los diferentes div definidos para poderlos utilizar como es el caso de error
  • Podemos ver el ejercicio funcionando en esta url
http://www.manuel.infenlaces.com/tienda/loginW.php

Especificaciones adcionales

  • Para este ejercicio vamos a separar la lógica del negocio de la presentación.
  • El resultado será un proyecto con varios fichero, estructurados en una organización previa lo que generarará un despliegue más organizado y estructurado
  • Las especificaciones no funcionales de este ejercicio son:

CLASES

Clases a utilizar

  • Se recomienda usar las siguientes clases, se aportan ejemplos de los métodos
BD.php
  • Clase con los métodos necesarios para acceder/consultar/validar en la base de datos. Por ejemplo
  • Fuera de este fichero no se debe de acceder a la base de datos ni a objetos mysqli ni msqli_result, por lo que las consultas deberán de retornar un array de elementos (objetos o filas)
 validarCliente($usuario,$password)
 obtenerProducto($codigo)
 obtenerProductos ()
Producto.php
  • Clase para interactuar con un producto concreto
  • Deberá de tener todos los atributos que tenga la tabla producto (Al menos todos los que necesitemos en nuestra aplicación.
CestaCompra.php

Acciones relacionadas con la cesta de la compra

nuevoArticulo()
getProductos()
getUnidades()
getCoste()
vaciar()
BD.php
Clase con los métodos necesarios para acceder/consultar/validar en la base de datos. Por ejemplo
validarCliente($usuario,$password)
obtenerProducto($codigo)
obtenerProductos ()
Producto.php
Clase para interactuar con un prodcuto concreto
CestaCompra.php
Acciones relacionadas con la cesta de la compra
nuevoArticulo()
getProductos()
getCoste()
vaciar()

PLANTILLAS

  • Es la parte de interfaz de cliente
  • Normalmente cada parte php tendrá su plantilla, de modo que los ficheros php solo tienen código de control y de acceso y gestión de la base de datos
login.tpl
productos.tpl (listaProductos.tpl y productosCesta.tpl)
cesta.tpl

NEGOCIO o LÓGICA

  • 5 plantillas tendremos 5 ficheros php, aunque esto no tendría que ser necesariamente así
cesta.php
login.php
logoff.php
pagar.php
productos.php
  • La funcionalidad queda descrita en el enunciado

Forma de proceder

  • Vamos a hacer este ejercicio de forma incremental, realizando cada parte con el fin de ir asimilando bien los conceptos de plantillas y la separación de negocio o lógicay presentación.
  1. Login ==> Nos identificaremos para acceder al sitio web
  2. Productos ==> Se visualizarán una lista de todos los productos
  3. Logoff ==> Tendremos la opción de desconectarnos
  4. Cesta ==> Aparecerá la posibilidad de ir incorporando nuevos elementos a la cesta
  5. Opciones de Cesta ==> Podremos o pagar y terminar la app o bien vaciar la cesta de la compra
  6. Descripción ==> Algunos productos pueden tener una descripción que querremos visualizar
  • Cada una de estas cinco acciones deben de constituir una aplicación.