¿Se están colando rusos o chinos por el formulario de contacto en Prestashop?

Según información proveniente del foro de Prestashop, les seguía pasando incluso después de haber instalado el Capcha de Google en la tienda.

Según nos comenta el usuario FCapdevila de la comunidad de Prestashop, el problema es que su versión de Prestashop no estaba actualizada, por lo tanto ha tenido que aplicar el siguiente parche:

* Estas modificaciones ya van incluidas a partir de Prestashop 1.6.1.17

Toda la información en el siguiente enlace:

https://github.com/PrestaShop/PrestaShop/pull/8168/files

Editas los fichero:

/controllers/front/ContactController.php
/themes/TuPlantilla/contact-form.tpl

Y realizar la siguientes modificaciones (clic para ampliar imágenes).

Cuando se indica “+” significa añadir línea y cuando se indica “” significa quitar línea.

Fichero: /controllers/front/ContactController.php

ContactController.php

Fichero: /themes/TuPlantilla/contact-form.tpl

contact-form.tpl

No se os olvide limpiar la caché de Prestashop en la pestaña Parámetros Avanzados -> Rendimiento

Seguiremos informando de más novedades sobre este aspecto …

Añado: Recomendable cambiar también los emails destinatarios del formulario de contacto -> Administrar destinatarios del formulario de contacto

Añado 2: Esto no quita que no tengas que añadir el captcha de Google a tu tienda: Revisar enlace

* Actualización del artículo:

Añado 3: 
Según ha informado Prestashop:
http://build.prestashop.com/news/fighting-against-spamming/

    • Para Prestashop 1.7 las tiendas recibirán en breve una actualización del módulo correspondiente al formulario de contacto correspondiente a lo comentado en esta entrada respecto a la 1.6. Recordar que en Prestashop 1.7 el formulario de contacto es un módulo, por lo tanto, solo será necesario actualizar el módulo desde el panel de administración.
    • Por otro lado, se recomienda desinstalar el módulo “Enviar a un amigo / Send to a Friend” de Prestashop.
    • Además, para PS 1.6 (independientemente del parche comentado en el post actual que debe ser añadido si usáis Prestashop 1.6 con una versión inferior a Prestashop 1.6.1.17) se espera en la 1.6.1.19 una actualización para que Prestashop no envíe el mensaje de confirmación del envío del formulario de contacto al email ingresado en el mismo.

Mostrar fecha de modificación del producto en Prestashop

En este manual para Prestashop, vamos a mostrar la fecha de modificación (actualización) del producto en la ficha del producto.

Fecha actualización producto

Para mostrar la fecha de modificación (actualización) del producto en la ficha del producto editamos el fichero:

/themes/default-bootstrap/product.tpl

Donde vamos a usar la variable:

{$product->date_upd}

En nuestro caso la hemos añadido debajo del bloque de “Condiciones” de la ficha del producto, donde podemos ver en la captura inicial, por ejemplo “Estado -> Nuevo”

Fecha creación producto

Como podéis ver en la captura (si pincháis sobre ella) hemos añadido debajo del código correspondiente al bloque de condiciones (nuevo, usado, etc..) el bloque para mostrar la fecha de actualización (modificación) del producto.

Mostrar fecha de creación

En la variable hemos usado “date_format” en Smarty: https://www.smarty.net/docs/en/language.modifier.date.format.tpl para formatear la fecha: día / mes / año, revisar el enlace para ver toda la información sobre este aspecto.

Fecha formateada

El literal “Last update” o el que vayáis a colocar recordar que se debe cambiar para los distintos idiomas desde la pestaña Localización -> Traducciones -> Modificar Traducciones

Modificar traducciones
Palabra a traducir

Documento testeado en Prestashop 1.6.1.18 con la plantilla por defecto.

PosData: Si no veis los cambios, recordar limpiar cache en la pestaña Parámetros Avanzados -> Rendimiento

No me muestra el nombre del atributo en la ficha del producto en Prestashop

Es una tontería, pero, aunque parezca mentira ocurre todavía en algunas plantillas que compras en la tienda de addons o en cualquier otra tienda de plantillas, evidentemente son casos muy concretos y por suerte la mayoría de plantillas están bien desarrolladas y muestran el nombre del atributo en las combinaciones de los productos.

Si estas usando una plantilla que no es la que lleva por defecto Prestashop y te muestra los valores de los atributos correspondiente a las combinaciones que has establecido en los productos, pero no el nombre del atributo (suponiendo que hayas configurado correctamente los atributos, valores y combinaciones de los productos).

¿Por qué no aparece el nombre del atributo?

En el fichero:

/themes/TuPlantilla/product.tpl

Dentro del bucle  {foreach from=$groups key=id_attribute_group item=group} no tienes introducida la visualización del nombre del atributo.

$group.name

Fijaros que en la plantilla por defecto (/themes/default-bootstrap/product.tpl), tenemos la siguiente instrucción:

Código
Código

Debajo del inicio del bucle que he comentado inicialmente y del <fieldset class=”attribute_fieldset”> 

Si en vuestra plantilla no viene, simplemente copiar la instrucción del fichero /themes/default-bootstrap/product.tpl  y pegar la instrucción en el fichero /themes/TuPlantilla/product.tpl.

Código product.tpl
Nombre grupo

Este TIP es válido para Prestashop 1.6 (no para Prestashop 1.7)

Cuidado al modificar los h5 de los listados en Prestashop

Este documento es para Prestashop 1.6 (no para Prestashop 1.7).

Imaginemos que tenemos la feliz idea de cambiar los h5 por h3 (es un ejemplo solo) en los títulos de los productos de los listados en Prestashop

Nos vamos al fichero: /themes/default-bootstrap/product-list.tpl buscamos la siguiente linea de código:

Código a modificar

Y cambiamos el h5 por h3

Código modificado

Y cuando vamos a la web, de pronto vemos que depende el título del producto aparece un texto denominado: undefined

undefined

Y entramos en pánico extremo….

Simplemente nos falta editar el fichero:

/themes/default-bootstrap/js /global.js

Y dentro de la función:

function display(view)

Buscamos la siguiente línea de código:

html += '<h5 itemprop="name">'+ $(element).find('h5').html() + '</h5>';

Esta línea aparece dos veces dentro de la función function display(view) una dentro del if (view == ‘list’) y otra dentro del else

Código
Código

Simplemente cambiamos la línea por:

html += '<h3 itemprop="name">'+ $(element).find('h3').html() + '</h3>';
Código cambiado

Y a modo informativo comento: 

¿Recordáis que tenemos la función de grid (cuadricula)  y list (lista) en listados de productos? ¿no?

Grid y list

Pues ahora fijaros donde hemos cambiado el h5 por h3 en el fichero JS y veréis la vinculación que tiene.

Continúa leyendo Cuidado al modificar los h5 de los listados en Prestashop

[DOC] Configuración del servidor para Prestashop

Recomendaciones a la hora de configurar tu servidor en Prestashop.

Para acceder a las recomendaciones, debéis pinchar en las siguientes imágenes (dependiendo de la versión de Prestashop que uses).

Para Prestashop 1.6

Configuración servidor en Prestashop 1.6
Configuración servidor en Prestashop 1.6

Para Prestashop 1.7

Configurar servidor en Prestashop 1.7

Actualización dentro de Prestashop 1.6 y el formulario de contacto no funciona

Hablamos dentro de la rama de Prestashop 1.6

Imaginemos que tu tienda tiene la versión 1.6.1.14 de Prestashop  y has actualizado a Prestashop 1.6.1.17 y te funcionan todos los emails, menos el formulario de contacto.

En el fichero:

/themes/TuPlantilla/contact-form.tpl

Añade dentro de (y encima del botón de enviar) :

<div class=”submit”>

Las siguientes lineas de código:

<input type="text" name="url" value="" class="hidden" />
<input type="hidden" name="contactKey" value="{$contactKey}" />

En esta captura podéis ver la localización exacta:

Código modificado

Ocultar método de pago a un producto en Prestashop

En esta guía, vamos a ocultar el método de pago de transferencia bancaria en Prestashop a un producto que se llama “Chorizos de Alcantarilla”.

En este ejemplo, vamos a editar a manorra (pero recordar que lo ideal es hacer un override de la clase del módulo):

Dentro del fichero: modules/bankwire/bankwire.php y dentro de la función del hook -> hookPayment

Recogemos los productos del carrito, comprobamos el ID de un producto en concreto coincide con el que queremos ocultar ese método de pago para ese producto  y dejamos de mostrar el método de pago en Prestashop para el producto “Chorizos de Alcantarilla”:

La función del hookPayment por defecto esta así en el módulo de transferencia bancaria.


public function hookPayment($params)
{
if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;

$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_bw' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
}

Dentro vamos añadir, la siguiente línea:


$products = $this->context->cart->getProducts();

Para obtener los productos del carrito.

Y para recorrer los productos del carrito, usaremos (un foreach), si alguno de los productos del carrito coincide con el ID del producto que hemos puesto en la comparación, no retornamos nada, y por tanto no se muestra el método de pago del módulo de transferencia bancaria.

if($products)
{
foreach ($products as $productos) {
if ($productos['id_product'] == 'X')
{
return;
}
}
}

Recordar que donde he puesto ‘X’, vosotros tenéis que colocar el ID del producto a ocultar

La función quedaría así:


public function hookPayment($params)
{
$products = $this->context->cart->getProducts();

if($products)

{
foreach ($products as $productos) {
if ($productos['id_product'] == 2)
{
return;
}
}
}

if (!$this->active)
return;
if (!$this->checkCurrency($params['cart']))
return;

$this->smarty->assign(array(
'this_path' => $this->_path,
'this_path_bw' => $this->_path,
'this_path_ssl' => Tools::getShopDomainSsl(true, true).__PS_BASE_URI__.'modules/'.$this->name.'/'
));
return $this->display(__FILE__, 'payment.tpl');
}
Código para ocultar método de pago por producto en Prestashop

Recordar que lo ideal es hacer un override de la clase del módulo. ¿Cómo se hace un override de la clase de un módulo?

Documento testeado en PrestaShop 1.6.1.14

Localizar rutas y nombres de ficheros de módulos en Prestashop

¿Os acordáis del módulo que nos permitía conocer la información de los módulos, como por ejemplo la ruta de los ficheros?

En esta ocasión, vamos hablar y poner un ejemplo, de cómo hacerlo (más simplificado) a nivel de código. (El módulo que estuvimos comentando el otro día es más completo)

El usuario Nemo de la Comunidad de Prestashop, nos proporciona un pequeño truco en un videotutorial en el idioma de Shakespeare que hemos pasado de forma transcrita al idioma de Cervantes.

Vamos a tocar clases originales, pero recordar que lo recomendable es siempre hacer un Override.

Editamos el fichero:

/classes/module/Module.php

Dentro de la función “display” ->  public function display($file, $template, $cache_id = null, $compile_id = null)

Y encima de:

return $result;

Añadimos el siguiente código:

if ($result && _PS_MODE_DEV_ === true) {
$tpl_path = $this->getTemplatePath($template);
$result = '<!-- INICIO ' .$tpl_path. ' -->'. $result. '<!-- FINAL'. $tpl_path.' -->';
}
Debug ficheros TPL de los módulos en Prestashop

Con esta línea:

if ($result && _PS_MODE_DEV_ === true)

Solo mostraremos esta información, si hemos habilitado el debug en Prestashop y si hemos obtenido un resultado.Recordar que para hablitar el debug en Prestashop 1.6, es en: /config/defines.inc.php cambiando el valor “false” de define(‘_PS_MODE_DEV_’, false); por “true“.

En esta línea:
$tpl_path = $this->getTemplatePath($template);

Obtenemos la ruta del fichero “*.tpl”.

En esta línea:

$result = '<!-- INICIO ' .$tpl_path. ' -->'. $result. '<!-- FINAL'. $tpl_path.' -->';

Guardamos resultado en la variable $result que se va usando a lo largo de la misma función y que retorna la función.

Ahora veremos que en el código fuente de la tienda, podemos localizar fácilmente los ficheros “.tpl” de los módulos. En esta ocasión estamos viéndolo desde Inspeccionar Elemento en Chrome (botón derecho ratón -> Inspeccionar elemento).

Documento construido bajo Prestashop 1.6.1.14

En Prestashop 1.7, directamente (y sin necesidad de modificar código) si habilitamos el modo depurador (modo debug) desde la pestaña Parámetros Avanzados -> Rendimiento 

Habilitar modo depuración en Prestashop 1.7
Habilitar modo depuración en Prestashop 1.7

Desde el mismo código fuente nos salta la ruta de los “tpls” de los módulos…

Ficheros TPL de los módulos en Prestashop 1.7

Fijaros que ademas de los ficheros (TPL), podemos ver fácilmente el nombre interno de los módulos, útil para identificarlos sino sabemos cómo se llaman y queremos configurarlos en la pestaña módulos -> módulos y servicios.

Un ejemplo es que el nombre interno del módulo de suscripción por newsletter es “ps_emailsubscription”. Nada más sabiendo este nombre interno podemos acceder a su configuración.

Acceder configuración del módulo