Añadir campos a la ficha de producto en Prestashop 1.5

publicado en: Tutoriales | 27

Después de tanto tiempo sin actualizar vengo con un pequeño tutorial bastante interesante. En poco tiempo he tenido que hacerlo en un par de sitios. Vamos a ver como poder añadir un nuevo campo en la ficha de producto de Prestashop, en nuestro caso el campo a añadir será un editor de texto en el que podremos añadir gran cantidad de contenido, campos como el de la descripción y la descripción corta.

Tenemos que modificar una serie de archivos, así que vamos por partes. Primero abriremos el archivo classes/Product.php. Al principio del archivo veréis que se han declarado un montón de variables que se utilizarán más tarde, asi que lo que hacemos es crear una nueva en la que guardaremos el contenido del campo, así que añadimos junto a las demás public $nombreDelCampo;

Siguiendo en el mismo archivo tenemos que buscar el siguiente texto public static $definition = array(, se trata de un array en el que están declarados los campos de los productos. En mi caso me interesa duplicar el campo de descripción, así que si buscáis debajo del comentario /* Lang fields */ encontrareis el campo en cuestión, lo que haremos será seleccionar la linea:

'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),

Y duplicarla cambiándole el nombre, de modo que se quede como sigue:

'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),
'nombreDelCampo' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString'),

Ya tenemos retocada la clase de forma que Prestashop reconozca este nuevo campo que hemos creado, ahora toca crear el cuadro de texto que nos permitirá añadir o modificar contenido. Para ello abrimos el archivo adminFolder/themes/default/template/controllers/products/informations.tpl. En este tpl nos econtramos con el formulario que vemos en la página de producto. Como en la clase hemos duplicado la descripción aqui lo que vamos a hacer es lo mismo, vamos a buscar el cuadro de texto de la descripción y vamos a duplicarlos. Lo que buscamos es lo siguiente:

	
		
			{include file="controllers/products/multishop/checkbox.tpl" field="description" type="tinymce" multilang="true"}
			
			

({l s='Appears in the body of the product page'})

{include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='description' input_value=$product->description }

Lo duplicamos, cambiamos la parte que nos interesa y lo ponemos justo debajo (mucho ojo a la estructura que fijaos que estamos en una tabla). *Muy importante* Es indispensable que el campo que añadáis esté dentro del formulario (

), si no los cambios no se guardarán cuando guardéis. Así que justo debajo añadimos nuestra modificación:

	
		
			{include file="controllers/products/multishop/checkbox.tpl" field="description" type="tinymce" multilang="true"}
			
			

(Aparecerá en la ficha del producto en la sección que defina)

{include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='nombreDelCampo' input_value=$product->nombreDelCampo }

Con esto ya hemos conseguido que en la ficha del producto de Prestashop nos aparezca un nuevo campo en el que podemos añadir el contenido que necesitemos.

Ya nos queda poco.

El campo que acabamos de crear obviamente no viene por defecto en Prestashop, así que no han pensado en dejarnos un campo libre para usarlo, por lo tanto necesitamos entrar a nuestro gestor de la base de datos y añadir nosotros ese campo. Tenéis que buscar la tabla product_lang, por defecto el prefijo de la tabla suele ser ps_, con lo cual buscaríais ps_product_lang, pero puede que tenga otro prefijo diferente (yo por seguridad le suelo cambiar el prefijo). Así que nos vamos a la tabla y modificamos la estructura añadiendo al final un campo que se llame como nuestra variable. Con esto ya tendremos un hueco reservado para poder añadir nuestro texto.

Por último vamos a añadir en la ficha del producto(front office) nuestra variable para que todos puedan ver el contenido que hemos añadido. Por lo tanto nos vamos a la carpeta del theme que tengamos activo y buscamos el archivo product.tpl. En mi caso voy a añadir el contenido en una nueva tab de las que aparecen por norma general bajo el producto (en el lugar que suele aparecer la descripción larga), por ello busco la sección de las tabs:

	

Modificamos para que aparezca nuestro nuevo campo:

	

Fijaos como se ha añadido en segundo lugar esta tab, hemos hecho una comprobación de forma que si no hay contenido no se muestre. Esto es el titulo de la tab, así que como paso final tenemos que añadir el contenido propiamente dicho. Seguimos reutilizando código, así que vamos a usar el código de la descripción y modificarlo para que coincida con nuestras necesidades. Cogemos este trozo:

	
	
{$product->description}

Y lo dejamos de la siguiente forma:

	
	
{$product->description}
{$product->nombreDelCampo}

Listo! Con esto hemos acabado por fin. Ya tenemos nuestro campo editable en la ficha de producto de Prestashop.

En este caso la modificación requiere tocar bastante más código del que os tengo acostumbrados, pero creo que es una modificación muy útil y que seguro que la habréis necesitado en algún momento.

*Muy Importante* Antes de hacer cualquier cambio aseguraros de hacer copias de seguridad de TODO Estamos tocando en archivos y sitios que pueden hacer que se rompa todo y vuestra tienda se quede como un ladrillo.

Como siempre espero que os haya sido de utilidad. Espero vuestros comentarios, dudas y sugerencias!

27 comentarios

  1. Juan Pablo

    Hola,

    Es un tutorial muy útil, he seguido todos los pasos pero tengo un problema. Yo he añadido un campo que se llama InformacionNutricional a los productos, despues de hacer todo lo que pone aquí, funciona y me aparece el nuevo campo, el problema viene cuando escribo algo en el, que no me guarda el contenido, yo escribo algo, le doy a guardar y me sale el mensaje de guardado correctamente, pero el campo vuelve a estar vacio, no lo guarda.

    Sabes porque puede ser??

    Gracias!

    • dwalins

      Hola Juan Pablo,
      Me alegra mucho que te sea de utilidad, para mi sin duda ha sido uno de las modificaciones que más he tenido que volver a hacer una y otra vez. De primeras se me ocurre que quizas el campo no se haya creado bien en la base de datos o tal vez el nombre no sea el mismo y por eso no lo reconoce. Verificalo y me dices por si no es eso ver que puede ser.

      Un saludo!

  2. Juan Pablo

    Ya esta! en uno de los archivos que había que editar, al poner el nombre del nuevo campo se me habia colado una letra.. lo he arreglado y ya funciona!

    Muchas gracias! 🙂

    • dwalins

      Estupendo! Me alegra que haya tenido tan fácil solución 😀
      Espero seguir viendote por aqui!

      Un saludo!

  3. Luis Fernandez

    Hola , pero cuando vayamos a hacer una importación de producto a la tienda , dispondremos de la columna en el fichero de importar?

    un saludo

    • dwalins

      Hola Luis,
      La verdad que es una buena pregunta y he tenido que comprobarlo. Con esta modificación no tenemos el campo disponible en el menú de importación de Prestashop. He estado mirando y no parece muy complicado añadir esta funcionalidad, voy a probar una cosa y os comento el resultado.

      Un saludo

    • Rafa

      Hola dwalins,
      me pregunto por esta implementación también, pues estoy a punto de exportar la tienta a servidor online, y no se si todo funcionará bien y permanecerán los cambios en esa tabla.. no se si me explico.. gracias, un saludo!!

    • dwalins

      Hola Rafa, si te llevas los archivos y la tabla a tu servidor online estos cambios van a permanecer sin ningún problema. Los archivos solo tienes que subirlos donde corresponde y al exportar e importar el sql ya llevas incluida las modificaciones que hayas hecho. Todo te va a funcionar perfectamente 😉

  4. Rafa

    Hola, gracias por las ayudas prestadas..
    funciona en la version 1.6 de prestashop?

    • dwalins

      Hola Rafa, me alegra que os sea de utilidad. Pues si esta modificación también funciona para la versión 1.6, puedes seguirlo paso a paso sin ningun problema.

    • Rafa

      Gracias por la rápida respuesta, en cuanto pueda lo pruebo y comento, gracias!

    • Juan Pablo

      Hola! una pregunta que no viene al tema, pero no se donde ponerla. ¿Hay alguna manera de exportar datos como clientes, productos y categorías desde una web con Prestashop 1.4.8 a una web con Prestashop 1.6??

    • Juan Pablo

      Hola Dwalins, estoy probando poner este campo en prestashop 1.6.0.9 y en el paso de modificar el informations.tpl no encuentro ese cogido, es diferente en esta parte, por lo menos a mi, utilizo un tema diferente al por defecto pero no tiene nada que ver ¿no? Prefiero no avanzar ni tocar nada hasta que me puedas decir algo.

      Gracias!

    • dwalins

      Hola Juan Pablo, efectivamente en esta versión ya no está apareciendo de esa forma, se han pasado a bootstrap y ya no hay una tabla que contenga todo. En esencia sigue siendo lo mismo, se hace un include en este caso de un textarea. Si abres el archivo verás que sobre la linea 331 tienes el label de la descripción y algo más abajo el mismo include, ahora está rodeado por un div en lugar de un td.

      Debes poder modificarlo sin problemas orientandote con los pasos que hay aqui, de todas formas voy a intentar actualizar esta información.

      Un saludo!

    • Juan Pablo

      No me acaba de salir bien 🙁 podrias actualizar la informacion de este post??

      Gracias!

    • dwalins

      Hola Juan Pablo,
      He publicado una nueva entrada con los pasos actualizados,échale un vistazo.

      Un saludo!

  5. Juan Pablo

    Queria poner un comentario aparte, no una respuesta al anterior, perdon por el error..

    Vuelvo a poner aqui la pregunta: ¿Hay alguna manera de exportar datos como clientes, productos y categorías desde una web con Prestashop 1.4.8 a una web con Prestashop 1.6??

    • dwalins

      Hola Juan Pablo,
      Tienes varias opciones, si tienes posibilidad de actualizar a alguna versión superior puedes usar el propio exportador que lleva prestashop, si no puedes, hay un modulo llamado mousiq (puedes pillarlo aqui) que te dejaba exportar y es compatible tanto con 1.4.x como con 1.5.x. Si por alguna razon esto no te sirviera siempre puedes llevarte la parte que te interese de la base de datos para importarla donde quieras, aunque esto es algo más delicado, pero si te manejas bien no hay ningún problema.

      Un saludo

    • Juan Pablo

      La verdad esque intale ese modulo que saque del foro de prestashop, pero no entiendo como funciona y me parece que es para exportar productos, no lo se muy bien la verdad. Para hacerlo mediante la base de datos como seria??

    • Juan Pablo

      Ya he entendido como funciona y si, solo me deja exportar productos, para eso me ha sido útil, pero necesito los clientes también, que son unos cuantos. Cuando puedas podrías explicarme como hacerlo a través de base de datos?? Gracias!

    • dwalins

      Hola Juan Pablo, vamos a probar una cosa antes, he encontrado un módulo que exporta los clientes de Prestashop, no lo he probado pero parece cumplir justo con lo que necesitas, puedes descargarlo del foro oficial. Pruébalo y me comentas que tal, porque si te quitas tener que directamente tocar la base de datos mejor que mejor.

      Un saludo!!

    • Juan Pablo

      Probado, es lo que necesitaba, pero tiene un problema bastante gordo.. no exporta las contraseñas. No he visto que nadie ponga nada sobre eso en el foro, pero bueno intentare modificar el modulo en el ftp para que exporte contraseñas tambien. Si tienes algo que me sirva de ayuda avisame como siempre haces 🙂

      Si consigo hacerlo te digo algo.

      Gracias por tu ayuda!

    • Juan Pablo

      Conseguido! era bastante sencillo el cambio, los passwords estan encriptados, me daba miedo que no funcionase por el prestashop 1.6, pero si, funciona.

      Gracias!!

    • dwalins

      Hola Juan Pablo, me alegra que te haya funcionado. Sin duda es raro que no te exportara los passwords, porque sin ellos los clientes no iban a poder iniciar sesión.

      Un saludo!

    • Juan Pablo

      Si la verdad, pero ahora tengo otro problemilla, que no me rompere la cabeza para solucionarlo, te lo comento y si sabes algo perfecto. Cuando exportas los passwords estan encriptados y al importarlos no los desencripta, me explico:

      El password del cliente es «contraseña1», prestashop lo encripta y cuando exportas la contraseña es «234jdushbu12n3pih2nsi» por ejemplo, a la hora de importar, el password del cliente sera «234jdushbu12n3pih2nsi» y no el suyo..

      Pero bueno, que vayan entrando y le del a «¿Olvido su contraseña?» y la cambien. No? jaja

      Gracias

    • dwalins

      No te preocupes que eso no es un problema, está funcionando correctamente y no van a tener que cambiar nada. Cuando desde prestashop guardas una contraseña lo que hace es coger ese valor lo concatena con la cookiekey y lo encripta, entonces lo que se guarda en la base de datos es esa cadena codificada para que no puedar ser vista por nadie, entonces cuando el usuario va a iniciar sesión introduce su clave y se repite el proceso, se concatena y se codifica para ser comparada con la que hay almacenada en la base de datos, si son iguales puedes acceder.

      Por este motivo es por el que no puedes ver nunca la contraseña de alguien y si la pierde tiene que crear una nueva, porque al estar encriptado no hay forma de ver el valor aunque tengas acceso a la base de datos.

      Así que ojala todo los problemas fueran como este 😉

  6. Añadir campos a la ficha de producto en Prestashop 1.6 | Dwalins

    […] Esta es posiblemente una de las entradas más útiles que he publicado, la he usado muchas veces y estoy seguro que voy a seguir usandola muchas veces más. Con la nueva versión de Prestashop, la 1.6.X la forma en la que está construida la plataforma cambia un poco y por eso creo necesario una revisión de este tutorial para adaptarlo a los nuevos tiempos. Voy a dejar intactas las partes que aún son igual de válidas y me voy a centrar en modificar unicamente lo que ha cambiado. Si estás buscando esta misma modificación pero para la versión 1.5.X puedes encontrarla aqui. […]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *