Vamos a actualizar nuestra Política de privacidad próximamente. Te recomendamos consultar el avance.

PrestaShop: Módulos

Cómo guardar los datos del formulario en la base de datos

¡Prueba gratis durante 10 días

nuestros 1288 cursos !

Prueba gratis Mostrar modalidades de suscripción
Cuando un usuario suba una fotografía y añada un comentario, tendremos que guardarlos en la base de datos para que más adelante se puedan ver en la vista de detalle, así que en este vídeo veremos cómo recuperar estos datos.

Transcripción

Recuperemos ahora los datos enviados desde el formulario. En este formulario, tengo por un lado un "Input File", que es el que me devuelve el archivo seleccionado por el usuario, que tiene que ser un archivo de imagen, y por otro lado tengo también un "Text Area", que tiene de identificador 'comentario' y 'foto'. Vamos a utilizar ambos –sus nombres, en realidad– para guardar esos datos en la base de datos, y de hecho también para recuperar la imagen que se ha subido y guardarla en un directorio donde tenemos todas las imágenes que se van a ir subiendo. Empezaré como hice en el momento de la configuración, o sea, comparando si hay un "submit". ¿De quién es el "submit"? Bueno, pues del botón Enviar. Ese botón que tiene un nombre concreto, así que utilizaré ese nombre. Para ello, entonces, voy a crear una sentencia condicional, voy a utilizar la clase 'Tools' y voy a preguntar si realmente es un envío, y si es un envío de ese 'fotocliente_submit_foto'. En caso de que esto sea así, el siguiente paso debería de ser comprobar si realmente se está enviando esta fotografía, este "Input". Así que para ello voy a hacer una condicional en la cual voy a preguntar a ver si el objeto 'files' tiene un campo "foto". Esto básicamente es un "array" con las distintas imágenes que se están mandando, cada una de ellas asociadas al nombre del "Input" que las envía. Pues en caso de que se haya creado ese Files foto, eso significa que efectivamente estoy recibiendo una foto. A partir de aquí empiezo a utilizar los datos de esa foto. La voy a asociar a la variable 'foto' para utilizarla más cómodamente y voy a comprobar que los datos que se están enviando sean correctos –quiero decir que tengan un nombre y demás–. En caso de que sí que sean correctos, a partir de aquí comprobaré si la imagen es del formato que para mí sea utilizable: GIF, JPG JPEG o PNG. Esos los guardo dentro de un "array" y ahora voy a hacer una comparación sobre el nombre en ese "array". Así que para ello, pues utilizo la función 'in_array' de PHP para comprobar que en el tipo de imagen que estoy subiendo se encuentra alguno de los elementos de este "array", o sea que efectivamente el tipo sea o GIF o JPG, etcétera ,etcétera ,etcétera. En ese caso ya es correcto, yo ya sé que está bien, con lo cual a partir de aquí pues puedo realizar la copia de esa fotografía. En principio no debería de copiar la foto según viene, debería de hacer que salga a un tamaño definido, porque si no los usuarios podrían subir fotos verdaderamente grandes. Así que voy primero a crear el "path" donde voy a guardar esas fotografías, que van a ser en la Upload, que está dentro de la instalación, aquí la podemos ver, esa carpeta Upload. Y, como decía, voy a modificar el tamaño de la imagen, y para poder hacer esa modificación lo que haré será recuperar el tamaño de la imagen como un objeto con 'getImagesize' y de ese tamaño voy a asociarlos el ancho y el alto a las variables. Así que ahora cuando utilice 'width', realmente lo que voy a hacer es utilizar el ancho de la imagen que se ha cargado. Y con el alto exactamente lo mismo, voy a calcular la proporción respecto de 400 píxeles, porque mi siguiente paso es cambiar el tamaño de esa fotografía y yo quiero que esa foto tenga un ancho de 400 píxeles, y me da igual el alto, lo voy a hacer siempre respecto de su ancho, por simplificar el código. Así que yo sé que la proporción entonces que tengo que aplicar sobre el alto va a ser ese 400 partido por el ancho real que tiene la imagen que estoy cargando. Y luego el siguiente paso es realmente hacer esa copia de la imagen. Y esa copia de la imagen además la puedo realizar utilizando una clase propia de PrestaShop, que es una utilidad muy interesante que sirve para trabajar con las imágenes: es el "Image Manager" y este tiene el método estático "Resize". En ese método "Resize" lo que hago es, como primer parámetro, pasar la imagen; esa imagen que estoy recuperando desde el objeto 'foto'. Como segundo parámetro, voy definir dónde quiero que se guarde la imagen y entonces voy a pedir que lo guarde dentro del "path" que he definido previamente y me voy a limitar a guardarlo con el mismo nombre que llevaba. Y luego por último le pongo el ancho, que va a ser ese 400 que había dicho previamente, y el alto, que va a ser la variable de proporción multiplicado por la altura real que tiene. Para terminar, además, voy a definir en qué formato se va a guardar esa imagen, voy a dejar que se siga guardando el mismo formato en el que vino. Aunque aquí realmente podría haber definido que se guardase pues por ejemplo en image.jpeg, por ejemplo. Todo esto se puede hacer mucho mejor, porque en realidad aquí lo suyo sería que el tamaño de la imagen dependiese de si es más ancha que alta o más alta que ancha, por ejemplo. También debería de comparar si esa imagen existe previamente con este nombre o debería de darle nombres basados por ejemplo en el "timestamp" para así hacer que cada una tenga un nombre único, o basadas en el "timestamp" más el identificador de producto. Se puede complicar bastante más, pero como ejemplo básico serviría perfectamente. He guardado dentro de la variable 'copy' el resultado de esa acción. Entonces, en caso de que sea falso significará que ha habido un error a la hora de copiar. Y en caso de que sea verdadero, aquí lo que debería es de terminar por fin de guardar todos estos datos. Esos datos que se podrían guardar utilizando directamente el "execute" del objeto 'db'. Pero en mi caso, ahora mismo, no me interesa porque hay otra forma mucho más cómoda de guardarlos, que es utilizando objetos, haciendo una clase que define el modelo de datos para este tipo de dato de esta tabla en concreto y utilizándolo pues veremos más adelante que es mucho más cómodo. De momento no quiero complicar mucho más este vídeo, así que lo que haré será simplemente añadir los errores que estoy recuperando dentro de todo este proceso. Y hay varios errores posibles, porque puedo haber recibido la imagen con el formato correcto o no y puedo también haber hecho la copia o no. Bueno, pues para poder pasar ese error al cliente, para que sepa que realmente ha habido un problema cuando subía la fotografía, lo que necesitaré es pasarle este error a la plantilla y para ello utilizo el 'this.context Smarty' que hemos utilizado previamente. En él utilizo el método "assign", al que voy a pasar una variable 'error-form' y en el que pongo el texto que quiero enviar. En este caso, pues error moviendo la imagen y la ruta de la imagen –por poner un ejemplo, realmente–. Y en el caso de que el formato de la imagen no sea correcto, pues también debería de pasar 'error-form' y decir que el formato de la imagen no es válido. Un método mejor es también intentar restringir, dentro del formulario, el formateo de la imagen, pero bueno, de momento así estaría correcto. Ahora tendré que guardar este código, tendré que irme a la plantilla y dentro de esta plantilla, primero comprobando que efectivamente se esté pasando este 'error-form'. Así que dentro de este "h3", justo debajo de él para que entre dentro de lo que es el elemento de mi módulo, voy a poner una sentencia condicional que pregunte si efectivamente se ha creado esa variable. En caso de que se haya creado ese 'error-form' y solo en ese caso, pues aquí dentro meteré una alerta. Y para ello utilizo las clases propias de Bootstrap, en este caso 'Danger', para que salga ahí en rojo, bien exagerado, y dentro de este 'dir' pues tendré que añadir el error que estoy enviando, pues en este caso esa variable 'error-form'. Le doy a Guardar y ahora si intento cargar una imagen que no sea del formato correcto, pues por ejemplo esta, y pulso en Enviar, el resultado tiene que ser que detecte que realmente no tiene el formato correcto, aquí lo vemos: "formato de imagen no válido" y me va a mostrar perfectamente esa alerta. En cambio, si hubiera seleccionado una imagen normal –voy a buscar una imagen normal– el resultado va a ser –voy a seleccionar– que aunque no lo va a guardar dentro de la base de datos, pero sin embargo ha aceptado perfectamente este envío. El siguiente paso, a partir de este punto, tiene que ser el guardar dentro de la base de datos esa imagen que estamos subiendo al servidor.

PrestaShop: Módulos

Introdúcete en la programación de módulos de Prestashop, empezando por conceptos básicos imprescindibles para crear bloques funcionales dentro de este CMS de comercio electrónico.

2:49 horas (33 Videos)
Actualmente no hay comentarios.
 
Software:
Fecha de publicación:12/10/2016

Este curso video2brain está disponible como descarga y para ser visualizado online. ¡Pero no hace falta que decidas entre las dos opciones! Al comprar el curso, disfrutarás de ambas posibilidades.

La descarga te permite ver las lecciones sin estar conectado/a a internet y supone una navegación fácil y ágil entre capítulo y capítulo. Si vas a trabajar en diferentes ordenadores o si no quieres descargarte el curso completo, entra en la web con tus datos de acceso y disfruta directamente de tus vídeos online. Te deseamos que disfrutes de este curso y te resulte de mucha utilidad.

Estamos a tu disposición si tienes cualquier tipo de duda o pregunta.