¿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 Capcha de Google 

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.

ContactController.php

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

contact-form.tpl

Seguiremos informando de más novedades sobre este aspecto …

Print Friendly, PDF & Email

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

Print Friendly, PDF & Email

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)

Print Friendly, PDF & Email

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

Print Friendly, PDF & Email

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
Print Friendly, PDF & Email

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

Print Friendly, PDF & Email

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
Print Friendly, PDF & Email

Prestashop 1.6.1.14 disponible para descargar

Prestashop acaba de publicar hoy (5 de junio del 2017) la versión 1.6.1.14, donde se han corregido mas de 15 errores respecto a su versión anterior.

Errores corregidos en Prestashop 1.6.1.14: Log de cambios

  • Back Office:
    • Bug fix:
      • #4803: Pipes in product names in autocomplete
      • #7908: Fix taxes in credit slip
      • #7806: Fix the refresh button of the stats bloc in the products list
      • #7821: Add API_KEY field to display the map
      • #7622: Set correct value on load to display the right tab
      • #7722: Translation of return merchandise fields
      • #7764: Fix html interpreted as text in carrier’s wizard summary
      • #7755: Fix non well formed numeric value
      • #7765: Fix error in HelperOptions
  • Front Office:
    • Bug fix:
      • #5739: Fix popover with multiple wishlists
      • #7673: Shipping cost indication wrong
      • #7350: Fix 404 bug when query string contains a LF
      • #7758: Fix manufacturer pagination
      • #7798: Fix JS error “Uncaught ReferenceError”
  • Core:
    • Bug fix:
      • #7814: Increase carrier delay length
      • #7917: Send Http 500 error code when we can’t connect to the database instead of a 200 code
      • #7913: Send Http 500 error code when we can’t connect to the database instead of a 200 code
      • #6080: make OrderInvoice overridable
    • Localization
      • Bug fix:
        • #7819: Replace EN (US) by EN (UK) in UK localization pack

Descargar Prestashop 1.6.1.14

Otras versiones de Prestashop: https://www.prestashop.com/es/versiones-anteriores

Print Friendly, PDF & Email

Añadir preguntas frecuentes en Prestashop 1.6 y 1.7

En el año 2012, estuvimos hablando de un módulo que nos permitía simular el funcionamiento típico de las preguntas frecuentes al estilo acordeón (El módulo era independiente de los contenidos creados en la pestaña Preferencias -> CMS).

En esta guía, vamos a realizar una pequeña integración en los contenidos que creamos en la pestaña Preferencias -> CMS, para mostrar preguntas y respuestas de forma que inicialmente solo aparezcan las preguntas y cuando hagamos click sobre la pregunta, aparezca la respuesta.

Implementar preguntas frecuentes en Prestashop
Desplegando preguntas frecuentes en Prestashop

Vamos hacer uso de este código: https://gist.github.com/neilgee/9284745#file-faq-html que hemos obtenido en el repositorio de github del usuario neilgee

Esta guía está realizada bajo Prestashop 1.6, pero también funciona en Prestashop 1.7

El código JavaScript:

$(document).ready(function() {

$('.faq_question').click(function() {

if ($(this).parent().is('.open')){
$(this).closest('.faq').find('.faq_answer_container').animate({'height':'0'},500);
$(this).closest('.faq').removeClass('open');

}else{
var newHeight =$(this).closest('.faq').find('.faq_answer').height() +'px';
$(this).closest('.faq').find('.faq_answer_container').animate({'height':newHeight},500);
$(this).closest('.faq').addClass('open');
}

});

});

Lo vamos a introducir en el fichero:

/themes/plantilla/js/cms.js

Código JavaScript CMS

El siguiente paso es introducir la estructura (código html) de las preguntas frecuentes en los contenidos que vayamos a crear en la pestaña Preferencias -> CMS

La estructura tiene la siguiente forma:

<div class="faq_container">
<div class="faq">
<div class="faq_question">Pregunta 1</div>
<div class="faq_answer_container">
<div class="faq_answer">Respuesta a la pregunta 1</div>
</div>
</div>
</div>

<div class="faq_container">
<div class="faq">
<div class="faq_question">Pregunta 2</div>
<div class="faq_answer_container">
<div class="faq_answer">Respuesta a la pregunta 2</div>
</div>
</div>
</div>

<div class="faq_container">
<div class="faq">
<div class="faq_question">Pregunta 3</div>
<div class="faq_answer_container">
<div class="faq_answer">Respuesta a la pregunta 3</div>
</div>
</div>
</div>

Desde el editor gráfico de contenidos que tenemos en la pestaña Preferencias -> CMS, pulsamos en Herramientas  -> Código Fuente (<>) y colocamos el código.

Insertar código HTML en el editor gráfico en Prestashop
Código HTML Prestashop

Por último, vamos agregar el estilo (css) de las preguntas frecuentes en el CSS de Prestashop, en nuestro caso vamos añadir el siguiente código:

/* CSS Preguntas Frecuentes */

.faq_question {
margin: 0px;
padding: 8px;
display: inline-block;
cursor: pointer;
font-weight: bold;
}

.faq_answer_container {
height: 0px;
overflow: hidden;
padding: 0px;
background:#fff
}

.faq.open .faq_question {
color: #fff;
}

.faq {
background: #e1e1e1;
border-bottom: 3px solid #fff;
}

.faq.open {
background: #635858;
border:none;
}

en el fichero:

/themes/plantilla/css/cms.css

El código javaScript entre otras cosas lo que hace es que cuando pinchamos sobre la pregunta, a la respuesta se le asigna una altura, ya que por defecto la altura (height) de la respuesta (.faq_answer_container) es 0px;

¿Funciona en Prestashop 1.7?

Este “tip” funciona en Prestashop 1.7, te nombro algunas diferencias.

Te recomiendo meter el “CSS“, en el fichero:

/themes/classic/assets/css/custom.css

El javascript, en el fichero:

/themes/classic/assets/js/custom.js

Y en referencia el código html que en Prestashop 1.6 lo insertamos en la pestaña Preferencias -> CMS, en Prestashop 1.7 tal como tenemos comentado en nuestra guía de ubicación de las pestañas en Prestashop 1.7, se encuentra en la pestaña Diseño -> Página  

Preferencias -> CMS en Prestashop 1.7

Continúa leyendo Añadir preguntas frecuentes en Prestashop 1.6 y 1.7

Print Friendly, PDF & Email

Ocultar ficha técnica en Prestashop 1.7

Depende cambiar la ubicación de la ficha técnica en la ficha del producto, en esta ocasión vamos simplemente a ocultarla de la ficha del producto, porque no queremos que se vea en la ficha del producto, pero si queremos que siga funcionando como ficha técnica a nivel del filtro de navegación por facetas, y a nivel del comparador de productos.

En este documento, vamos a realizar la mini guía bajo Prestashop 1.6 y Prestashop 1.7

Ocultar ficha técnica en Prestashop 1.6 en la ficha del producto.
Ocultar ficha del producto en la ficha del producto en Prestashop 1.7

Para Prestashop 1.6, usando la plantilla por defecto, editamos el fichero:

“/themes/default-bootstrap/product.tpl”

Buscamos el siguiente código:

{if isset($features) && $features}
<!-- Data sheet -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Data sheet'}</h3>
<table class="table-data-sheet">
{foreach from=$features item=feature}
<tr class="{cycle values="odd,even"}">
{if isset($feature.value)}
<td>{$feature.name|escape:'html':'UTF-8'}</td>
<td>{$feature.value|escape:'html':'UTF-8'}</td>
{/if}
</tr>
{/foreach}
</table>
</section>
<!--end Data sheet -->
{/if}

Y comentamos el código en Smarty

{* {if isset($features) && $features}
<!-- Data sheet -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Data sheet'}</h3>
<table class="table-data-sheet">
{foreach from=$features item=feature}
<tr class="{cycle values="odd,even"}">
{if isset($feature.value)}
<td>{$feature.name|escape:'html':'UTF-8'}</td>
<td>{$feature.value|escape:'html':'UTF-8'}</td>
{/if}
</tr>
{/foreach}
</table>
</section>
<!--end Data sheet -->
{/if}
*}
Código de la ficha técnica comentado en Prestashop 1.6

En Prestashop 1.7, editamos el fichero:

/themes/classic/templates/catalog/product.tpl

Y nos encontramos una llamada al fichero:

/themes/classic/templates/catalog/_partials/product-details.tpl

En esta parte del código del fichero  “/themes/classic/templates/catalog/product.tpl

{block name='product_details'}
{include file='catalog/_partials/product-details.tpl'}
{/block}

Este código, no lo vamos a tocar, vamos a ir al fichero:

/themes/classic/templates/catalog/_partials/product-details.tpl

Y buscamos este bloque:

{block name='product_features'}
{if $product.features}
<section class="product-features">
<h3 class="h6">{l s='Data sheet' d='Shop.Theme.Catalog'}</h3>
<dl class="data-sheet">
{foreach from=$product.features item=feature}
<dt class="name">{$feature.name}</dt>
<dd class="value">{$feature.value}</dd>
{/foreach}
</dl>
</section>
{/if}
{/block}

Y aquí podemos comentarlo el código (Smarty)

{* {block name='product_features'}
{if $product.features}
<section class="product-features">
<h3 class="h6">{l s='Data sheet' d='Shop.Theme.Catalog'}</h3>
<dl class="data-sheet">
{foreach from=$product.features item=feature}
<dt class="name">{$feature.name}</dt>
<dd class="value">{$feature.value}</dd>
{/foreach}
</dl>
</section>
{/if}
{/block} *}
Código de la ficha técnica oculto en Prestashop 1.7

Uno de los problemas que nos podemos encontrar, es que en otra parte del código de la plantilla estemos usando el {include file=’catalog/_partials/product-details.tpl’}, para asegurarnos de que realmente este cambio solo se esta aplicando a la ficha del producto y no a otra parte de la plantilla que este usando dicho include, depende comentar el código, podemos usar las variables globales y hacer un condicional que solo muestre el código si no estas en la ficha del producto.

Es decir, dejar el código así:

{if $page.page_name !='product'}
{block name='product_features'}
{if $product.features}
<section class="product-features">
<h3 class="h6">{l s='Data sheet' d='Shop.Theme.Catalog'}</h3>
<dl class="data-sheet">
{foreach from=$product.features item=feature}
<dt class="name">{$feature.name}</dt>
<dd class="value">{$feature.value}</dd>
{/foreach}
</dl>
</section>
{/if}
{/block}
{/if}
Condicional -> Muestro el código solo si no estoy en la ficha del producto

———

Por último, recordar limpiar la cache en la pestaña Parámetros Avanzados -> Rendimiento.

Print Friendly, PDF & Email