Prestashopcabecera cumplir con la lopd en prestashop

Hola a todos.

Escribo este artículo para compartir con todos vosotros por el pequeño quebradero de cabeza que me ha llevado añadir un simple checkbox de “He leido y acepto la Política de Privacidad” o mensaje similar en el formulario de contacto de Prestashop (en mi caso la versión 1.6.1.12) según indica la Ley de Protección de Datos.

Voy a usar el módulo “Bloque de privacidad de datos del cliente” (customerprivacy) y así nos aseguramos que va a funcionar en la versión de prestashop que estemos usando.

 

 

En primer lugar vamos a añadir el Hook del módulo en el fichero “contact-form.tpl“, que se encuentra en la carpeta raíz de nuestro tema, de la siguiente forma:

A continuación hacemos un “override” del fichero “ContactController.php”. Para no liaros no voy a poner ningún enlace que os explique qué es un override ni como se usa.

Simplemente os voy a decir que teneis que crear un fichero llamado “ContactController.php” en la siguiente carpeta de vuestro prestashop: /override/controllers/front/ y dentro de este fichero que habeis creado le colocais este código:

Digamos que la función de un override es extender con funciones nuevas a un fichero original php desde otro fichero externo y así evitar que cuando se actualice prestashop o el módulo con el que estamos trabajando se modifique el fichero php original y se borre nuestra nueva función o funciones.

Finalmente para que funcione correctamente el checkbox de “Aceptar Política de Privacidad” en el formulario de contacto de Prestashop para cumplir con la LOPD borramos la caché de Prestashop borrando el fichero “class_index.php” que se encuentra dentro de la carpeta /cache/.

Después ya entramos en el módulo “Bloque de privacidad..” y colocamos el texto que queramos así como el enlace a la página CMS de nuestra Política de Privacidad.

Espero que os haya gustado y os funcione.

 

ACTUALIZACIÓN (13/06/2018)

Hola a todos.

Debimos a los errores que me he ido encontrando para el check de aceptación para el formulario en prestashop usando el módulo ‘Bloque de privacidad de datos del cliente’ gracias a los comentarios de los usuarios, voy a poner otro método descubierto, muy sencillo y eficaz.

Este método mejora el anterior incluyendo un mensaje de error en el mismo formato que presenta prestashop, una ventana roja (según el tema) avisando de la necesidad de marcar la casilla.

1.- Colocamos el check en el archivo tpl del formulario (/themes/”tu-tema”/contact-form.tpl), añadiendo el siguiente código antes del botón submit (botón enviar):

Como observación deciros que esta maquetación la he realizado para que se ajustase bien a la plantilla usada, y puede ser necesario ajustarlo según la que uses. También puede modificar el texto usado a tu gusto.

En el link usado ‘getCMSLink(7)’ teneis poner en vez del 7 el id de la página CMS de vuestra Política de Privacidad.

 

check lopd en formulario de contacto en prestashop 1.6

 

Archivo ContactController.php

2.- Vamos a modificar el archivo /controllers/front/ContactController.php (yo siempre aconsejo usar override, pero para no liar modificamos el mismo fichero):

Tienes que añadir las lineas 35, 38 y 39.

Comentaros que la primera vez que lo probé no paraba de saiirme un error 500 en la web y era debido simplemente a que me faltaba cerrar unas llaves (}), comprobarlo todo bien ya que funciona sin problema.

Por supuesto también podeis modificar el mensaje de error que yo he colocado.

3.- Finalmente es importante borrar el siguiente fichero de caché, ya que hemos realizado modificaciones en archivos php: /cache/class_index.php. No os preocupeis de borrarlo ya que prestashop lo vuelve a generar pero ya actualizado.

 

Si te atreves con el check en el registro

En este caso es igual de simple, se trata de modificar el archivo /themes/”tu-tema”/authentication.tpl y añadir un código similar (depende si teneis que retocar la maquetación según vuestra plantilla:

Las líneas a añadir son de la 523 a la 527.

 

Archivo AuthController.php

Después añadir el siguiente código en el archivo ‘/controllers/front/AuthController.php

Las lineas a añadir son de la 389 a la 391 dentro de la clase protegida processSubmitAccount(). Debido a ser protected no es posible realizar un override.

 

check lopd en registro prestashop 1.6

 

Os hago la reseña que los número de línea de código incluidos pueden ser aproximados, ya que depende de cada plantilla instalada.

Y repito, es importante que os fijeis en abrir y cerrar bien todas las llaves para evitar el error 500 en vuestra web.

Pues esto es todo, espero que os sirva de ayuda y pido disculpas del anterior que estaba produciendo errores.

31 Comentarios

  1. wooow! Muchas gracias. Voy a probarlo. Una pregunta, ¿se podría usar esto mismo para añadir el checkbox al bloque de suscripción del newsletter?

    • Hola Peter.
      En primer lugar disculpa la demora en la respuesta.
      Pienso que debe funcionar de igual forma si incluyes el hook en el fichero tpl del modulo newsletter que tengas.
      Si lo pruebas puedes comentar aquí el resultado.
      Un saludo.

  2. Hola muchas gracias por tu tutorial pero tengo un problema, he seguido todos la pasos que has indicado pero ahora caundo intentio manda un mensaje me sale el siguiente mensaje: Error 1

    Si acepta los términos del mensaje Privacidad de los datos del cliente, haga clic en la casilla de verificación que aparece a continuación.
    pero no aparece dicho chekout ni antes ni despues .
    ¿prodrias ayudarme?
    Muchas gracias de antemano

    • Hola Julian.
      Disculpa la demora en la contestación, no se si ya habrás solucionado el problema.
      Lo que se me ocurre es que pueda ser por la caché, has vaciado la caché de prestashop ? Y si es así, prueba a vaciar la caché de tu navegador, yo con chrome últimamente estoy experimentando problemas con la caché con cambios realizados en web y no me los actualiza. También puedes probar con otros navegadores a ver.
      Qué versión de prestashop tienes instalada ?
      Un saludo.

  3. Antes de nada muchísimas gracias por este tutorial.
    Tengo una consulta. Tengo que desactivar la aceptación de la política de privacidad en el carrito o registro, porque ya me la hace otro módulo de one-page-checkout. La cosa es que sí que quiero que se acepte en el formulario de contacto. ¿Cómo se podría desanclar ese hook del módulo de one-page-checkout?

    • Hola Javier.
      Muchas gracias por tu comentario.
      Pues mira, no sé el módulo onepagecheckout que estás usando, pero creo que para desactivarlo tendrías que entrar en el php del módulo y allí comentar la parte del checkout, ya que pienso que estárá integrada en el mismo módulo, al menos por los que he probado yo.
      Ya me comentas si lo has encontrado.

  4. Yo tengo una duda, resulta que ya tenia creado el ContactController.php con el codigo que genera el modulo eicaptcha. Total, que si intento añadir los dos codigos siempre obtengo pantalla en blanco. El codigo que mete el eicaptcha es este. ¿Se podrian añadir los dos de alguna forma?. Gracias.

    redirect_after)) {
    parent::redirect();
    }
    if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className))) {
    parent::initHeader();
    }
    parent::initContent();
    if (!$this->content_only && ($this->display_footer || (isset($this->className) && $this->className))) {
    parent::initFooter();
    }
    parent::display();
    die;
    }
    }

    • Hola Alvaro.
      He puesto una actualización del post usando otro método y el mismo funciona perfectamente junto al módulo eicaptcha. Comprobado.

    • Hola Jose.
      No es compatible con prestashop 1.7 porque el módulo que utilizo “Bloque de privacidad de datos del cliente” no existe en la nueva versión.
      Próximamente colgaré algo parecido para 1.7.
      Un saludo.

  5. Buenas!

    He hecho todos los pasos y funciona correctamente, el problema es que cuando borro el caché de prestashop desde las opciones de Rendimiento me desaparece el checkbox del contacto, y no vuelve a aparecer hasta que borro de nuevo el archivo class_index.php ¿alguna idea de qué puede estar pasando?

    Gracias

    • Hola Juan.
      Te invito a que pruebes el nuevo método que he publicado como actualización que funciona perfectamente y además, incluye error del sistema para avisar que tienes que aceptar el check.

  6. Muchas gracias por el tutorial, funciona bien excepto por que aunque no se seleccione el checkbox el mensaje de contacto se envía igualmente.

    ¿Sabes a qué es debido esto y cómo podría solucionarlo?

    Un saludo.

  7. Muchas gracais por tu trabajo Juan CM mora

    Casi me funciona perfecto…pero…

    Cuando no marco el check de aceptar la prolitica de privacidad en el formulario de contacto y le doy a enviar, efectivamente no lo envía y da un error superior en rojo (como deberia ser) pero pone en este error “Error 1” nada más…ni mensaje ni nada…

    Puedes probarlo aquí:
    https://www.chasanga.es/contactanos
    ¿Sabes por que no pone el mensaje de “Debes aceptar la politica de privacidad”?

    • Hola Carlos.
      Comprueba que has implementado bien las lineas 35, 38 y 39 en el fichero ContactController.php (si no lo has hecho con override y posteriormente has actualizado prestashop se te va a machacar el script introducido).
      Aquí es donde se controla ese error, si no está activado el check visualiza el mismo).
      Un saludo.

      • Gracias.

        En el ContacController.php lo modifiqué, lo tengo así:

        class ContactControllerCore extends FrontController
        {
        public $php_self = 'contact';
        public $ssl = true;

        /**
        * Start forms process
        * @see FrontController::postProcess()
        */

        public function postProcess()
        {
        if (Tools::isSubmit('submitMessage')) {
        $extension = array('.txt', '.rtf', '.doc', '.docx', '.pdf', '.zip', '.png', '.jpeg', '.gif', '.jpg');
        $file_attachment = Tools::fileAttachment('fileUpload');
        $message = Tools::getValue('message'); // Html entities is not usefull, iscleanHtml check there is no bad html tags.
        $lopd = Tools::getValue('lopd');
        if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) {
        $this->errors[] = Tools::displayError('Invalid email address.');
        } elseif(!$lopd) {
        $this->errors[] = Tools::displayError('Debes aceptar nuestra política de privacidad');
        } elseif (!$message) {
        $this->errors[] = Tools::displayError('The message cannot be blank.');
        } elseif (!Validate::isCleanHtml($message)) {

Deja un comentario

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

Publicar comentario