PrestaShop: Módulos

Utilizar los objetos para guardar datos en la base de datos

Prueba ahora LinkedIn Learning sin cargo y sin compromiso.

Prueba gratis Mostrar modalidades de suscripción
Prestashop permite trabajar con objetos de datos para simplificar la forma en que se trabaja contra la base de datos. En este vídeo vamos a crear un modelo de datos para usarlo para guardar y recuperar los datos del módulo.

Transcripción

Veamos ahora cómo podemos utilizar la programación orientada a objetos para guardar datos dentro de la base de datos. Tengo una tabla en la que estoy guardando objetos que van a tener un identificador único, un identificador de producto, una foto y un comentario. Bien, pues voy a crear una clase que sirva precisamente para ello. Dentro de la carpeta Fotocliente, voy a crear una nueva carpeta que se va a llamar Clases. Y dentro de esta carpeta Clases voy a crear una nueva clase. Para ello, pulso en Crear New File y a este New File le voy a llamar "FotoclienteObj" por ejemplo, de objeto. Pulso en Guardar Como y aquí dentro voy a definir precisamente esa clase. Por supuesto que esta clase va a ser PHP, que va a tener el nombre igual al nombre del archivo en la que viene contenido, pero esta clase va a tener una serie de características específicas de PrestaShop, así que va a tener que extender la clase 'ObjectModel'. Eso va a servir para que así se pueda comunicar fácilmente desde el módulo con esta clase. Voy a necesitar definir las variables accesibles para ella, o sea, las propiedades propias de este objeto, que va a ser el identificador único, el identificador de producto, la fotografía y el comentario. Y luego voy a tener que crear una nueva función estática, que es la función que va a servir para definir esta clase y para que PrestaShop sepa cómo tiene que trabajar con ella para guardar sus datos en la base de datos y para también recogerlos. Para ello, de entrada voy a añadir un comentario en el que defino de dónde se está extendiendo esa función, ese método, y como digo voy a crear la variable 'Definition', estática, que va a ser un "array" y en ese "array" va venir –como decía– la definición de los distintos campos, que va a ser: por un lado, 'table', o sea, la tabla de donde se va a sacar, que va a ser este 'fotocliente_ item'. Es interesante ver que aquí no estoy poniendo el prefijo y es que no es necesario hacerlo. Luego voy a definir también la clave primaria, que va a a ser ese 'id_fotocliente_item', que va a ser multilenguaje, en principio puesto como "false", aunque en realidad podría ponerlo como verdadero, para así añadir diferentes idiomas, pero bueno por simplificar lo voy a poner como falso. Y luego también voy a pasar otro "array" con los diferentes campos, o sea, con el identificador de producto, la fotografía y el comentario. Y cada uno de ellos va a llevar un "array" de definición en el que definimos el tipo, pues en este caso un "int", y además también el tipo de validación que que queremos que tenga: pues si tiene que ser requerido, por ejemplo, "required" o el tipo de validación, si tiene que ser con signo, sin signo... Si fuese un "mail" por ejemplo, pues para definir que sea un "mail", etc. Con la foto será la misma idea, aunque el "array" va ser un poquito más simple, en este caso solamente que sea requerido. Y luego por último el comentario, exactamente la misma idea. En este caso, bueno, pues ha marcado una validación para que sea HTML limpio, para que no tenga etiquetas extrañas. Como se puede observar, desde el objeto desde el que se está sacando, o sea desde el 'object model' vamos a tener una serie de propiedades estáticas que son las que definen los distintos tipos de datos contenidos en la tabla, o sea, en la base de datos. 'int', 'string', 'barChart', etcétera, etcétera. Por otro lado, dentro de la documentación de PrestaShop, vienen los distintos tipos de validación que podemos aplicar a los diferentes tipos de campo. En cualquier caso, este objeto está preparado y ahora ya puedo utilizarlo dentro del 'hook' que se ocupa de guardar los datos que se están enviando desde el formulario. Para simplificar el código voy a crear tres variables donde voy a guardar los valores de identificador de producto, que lo voy a recuperar utilizando las "tools" que tanto estoy usando y en concreto voy a recuperar del formulario el 'getValue' - Identificador de producto. Ese viene por defecto y no necesito meterlo dentro de la plantilla. Por otro lado, el "path" donde se está guardando esa fotografía que se ha subido, que básicamente va a ser "upload/" y luego la fotografía. Aquí ya no tengo que poner este punto, barra, delante, porque esta ruta en concreto la va a sacar PrestaShop directamente de sí mismo. Quiero decir, no va a ser el módulo ni el 'hook' el que va a recuperar esa ruta. Por otro lado, en el comentario, bueno pues voy a recuperar el 'getValue' de este comentario. Ya tengo los tres valores que tengo que guardar, así que voy a crear una instancia de un nuevo objeto 'fotoclienteObj'. Lo guardo en la variable '$foto_obj'. Y a partir de aquí es trabajo con objetos, o sea, que "$foto_obj, identificador de producto" va a ser igual a... y recupero esa variable con el identificador de producto. Lo mismo lo hago con el "path" y lo mismo también hago con ese comentario. Me ocupo de que todos ellos estén formateados correctamente, para que no me genere un error a la hora después de enviar esos datos a la definición. Cuando ya tengo todo esa instancia con sus datos cargados, entonces utilizaré el método "Add". Este método "Add" hace que este objeto que he creado sea guardado dentro de la base de datos. Así que simplemente con este código ya he conseguido guardarlo, en vez de tener que añadir todo el código necesario SQL para realizar la inserción de ese objeto. En este caso, es bastante simple porque es un objeto muy facilito, pero podría ser bastante más complicado, así que como vemos, es una muy buena forma de trabajar. Y simplemente me quedaría comprobar el resultado. En caso de que se haya podido guardar correctamente pues el resultado va a ser verdadero y en caso contrario, falso. Así que puedo hacer que me muestre en la plantilla un error exactamente igual que el resto de los que tenía en caso de que haya habido algún problema o puedo hacer que me muestre una alerta con que ha sido válido. Voy a crear entonces utilizando Smarty una nueva variable 'saveForm', o sea, el formulario ha sido guardado correctamente, que voy a poner como uno. Y en caso de que haya habido algún error, pues envío que no se ha podido grabar la foto en la base de datos. Guardo este documento y ahora necesito pues añadir aquí una nueva sentencia condicional, exactamente igual que la anterior, con el error, pero en este caso buscando que se haya enviado esa variable 'saveForm'. Bueno, pues en caso de que se haya enviado –me importa muy poco el valor– creo una nueva alerta, en este caso 'success' para que salga en verde, en la que se muestre que la imagen ha sido añadida. Lo voy a guardar y vamos a comprobar que efectivamente está funcionando. Voy a seleccionar una nueva fotografía en la carpeta Fotos que tengo en mi escritorio, voy a poner de comentario: "Este es mi primer comentario y mi primera foto". Pulso en Enviar y si todo ha ido correctamente, debería de haber subido la foto. En caso de que me salga algún mensaje de este estilo, eso va a significar que tengo un problema con el código que he creado. Es muy interesante también ver que PrestaShop, a la hora de volverme errores, es muy parco. Tengo que buscar entonces alguna manera de conseguir ver de qué error se trata. Y hay una forma muy lógica y es irme dentro del MAMP, buscar los "logs", abrir los "logs" de error de PHP y aquí puedo ver que realmente no está encontrando la clase de 'FotoclientObj'. Bueno, pues esto es debido a que se me ha olvidado añadir algo muy importante en la primera línea. Y es que para que se sepa que efectivamente existe esta clase necesito añadir un "require" para ella. Quiero decir, necesito añadir esa clase dentro de mi PHP para que se entienda que existe. Lo voy a guardar de nuevo, voy a comprobar también que efectivamente exista este objeto en esa misma clase –que, por cierto, estoy viendo que le falta la extensión, así que se la voy a añadir: .php– y ahora voy a volver a Chrome, voy avolver atrás, voy a ir a la tienda, voy a seleccionar otro vestido y dentro de este vestido voy a intentar de nuevo añadir mi comentario. Voy a seleccionar Muñeco y voy a poner: "Este es mi primer comentario con la foto correspondiente". Pulsamos en Enviar. No me está mostrando esa foto porque todavía no he añadido ese apartado, pero sin embargo sí que me dice que la imagen ha sido añadida. Y la mejor forma de comprobar si realmente se ha añadido la imagen es entrar dentro de la base de datos de nuevo, irme a la tabla donde se están guardando mis datos y comprobar que efectivamente se ha creado dentro de 'Fotocliente_item" –aquí lo vemos– un nuevo objeto en el que sale el texto que puse y además la ruta "uploadjorge.png". Y de hecho si me voy a esa carpeta Upload, pues veo que efectivamente me ha creado ese "jorge.png", o sea que está funcionando correctamente. El siguiente paso tiene que ser conseguir que se recuperen desde el 'hook' los datos de las fotografías para ese identificador de producto y que se muestren también dentro de la plantilla.

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.