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

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

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) &amp;&amp; $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) &amp;&amp; $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.

Evitar el envío de un email en Prestashop

No estamos hablando de desactivar el envío de un determinado email en base a los estados de pedidos (Pedidos -> Estados).

Realmente es útil para aquellos emails que no podemos deshabilitar en el panel, pero que queremos deshabilitar. Tampoco hablamos de desactivar el envío de emails en general.

Por ejemplo vamos a desactivar este email, que recibe el cliente nada más el realizar el pedido: Este email usa la plantilla “order_conf“.

Email del pedido en Prestashop
Email del pedido en Prestashop

Lo que vamos hacer es un “override” de la clase Mail.php y vamos a indicar que si nos llega la plantilla “order_conf“, el email no se envía. Como los envíos de los emails usan la función Send de la clase Mail pues hacemos la comprobación directamente en la clase.

Creamos el fichero con el nombre “Mail.php” que vamos a guardar en el directorio “/overrides/classes/

<?php
class Mail extends MailCore
{
public static function Send($id_lang, $template, $subject, $template_vars, $to,
$to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null,
$template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null, $reply_to = null)
{
// No envía el email de la plantilla que nosotros vayamos a igualar en el "if"
if ($template == 'order_conf') {
return true;
}

return parent::Send($id_lang, $template, $subject, $template_vars, $to, $to_name, $from, $from_name, $file_attachment, $mode_smtp, $template_path, $die, $id_shop, $bcc, $reply_to);
}
}

Si observáis el código, aquí:


if ($template == 'order_conf')

estamos haciendo la comprobación de la plantilla.

Esto tiene un problema, que, si la misma plantilla la usan otras partes de la tienda, pues tampoco se enviara ese “email” 🙂

Por cierto, en su momento hicimos una guía específica para evitar que el cliente reciba el email de confirmación en Prestashop (es una forma diferente, pero más “especifica”, en este ejemplo hablamos de “forma general” para cualquier email que use la plantilla que se usa el email que recibe el cliente al realizar un pedido con el resumen del pedido).

Hemos puesto un ejemplo, pero podría haber sido con otra plantilla.

Información obtenida en:

https://www.prestashop.com/forums/topic/315165-disable-mail-for-credit-slip/

Documento realizado bajo Prestashop 1.6.1.12

Prestashop 1.6.1.13 disponible para descargar

Si recordamos, hace un mes aproximadamente, Prestashop, anuncio la versión 1.6.1.12 de Prestashop, hoy día 25 de Abril Prestashop ha sacado la versión 1.6.1.13, donde se han corregido más de 16 errores con respecto a sus antecesoras.

Algunos de los errores corregidos:

  • Panel de administración (BackOffice):
    • Error corregido en la importación de los temas cuando el directorio cache se vacía
    • Permitir transferencia de Stock entre almacenes bajo la multitienda
    •  Se repara la búsqueda en la gestión avanzada de stock.
    • Generación de facturas en el idioma del usuario
    • etc..
  • Front-Office
    • Precio en las combinaciones cuando existe un descuento por cantidad de la misma.
    • Reparación de los estilos del bloque de categorías del pie de página
    • etc..
  • Núcleo (Core)
    • Optimización de las reglas del carrito
    • etc..

Prestashop 1.6.1.13: Descargar

Log/Registro de cambios: Ver

 

Cambiar ficha técnica de ubicación en el producto en Prestashop 1.6

Imaginemos que queremos que la ficha técnica que hemos definido en el producto, se muestre encima del botón “imprimir” de la ficha del producto.

Ubicación de la ficha técnica en Prestashop

 Por defecto, la ficha se muestra en la parte inferior de la ficha del producto.

Ubicación real de la ficha del producto en Prestashop

Para cambiar la ficha de ubicación, vamos al fichero:

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

Buscamos el siguiente bloque de instrucciones:

{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 del producto en Prestashop

Y vamos a colocar el código, justo debajo de la siguiente instrucción:

{if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}
Código de la ficha técnica cambiado de ubicación en Prestashop

Continúa leyendo Cambiar ficha técnica de ubicación en el producto en Prestashop 1.6

Actualizar masivamente precios en base a la referencia en Prestashop

Este aporte lo vamos hacer con el propio importador de productos de Prestashop, combinándolo con un aporte del usuario Inform-All de la comunidad de Prestashop.

La idea es hacer la importación, teniendo solo como datos la referencia del producto y los precios (precios sin impuestos añadidos). (Ningún dato más)

Vamos a cambiar los precios que vemos en la siguiente imagen, que son pertenecientes a unos números de la colección Tiger and Wolf

Referencia y Precios de los productos en Prestashop

El primer paso es instalar el módulo que lo podemos hacer desde la pestaña módulos -> módulos (al final del post, tenéis el enlace de descarga).

Módulo para agilizar la actualización de precios en los productos en Prestashop

El módulo (para los experimentados) lo que hace es instalar un override del controladorAdminImportController.php” (/override/controllers/admin/)

¿Permite el módulo alguna configuración adicional para su funcionamiento?

No permite ninguna configuración adicional, con instalarlo es suficiente.

¿Cómo procedemos a realizar la importación para actualizar los precios en base a las referencias de los productos?

Lo primero es elaborar u obtener el fichero que nos ha pasado el proveedor con los nuevos precios (recordar precio sin impuestos incluidos) y la referencia del producto.

Fichero CSV con precio y referencia en Prestashop

En el siguiente paso, nos vamos a la pestaña Parámetros Avanzados -> Importar CSV

Sección importación de productos en Prestashop

Una vez, hemos accedido a la sección de importación de datos, nos vamos al bloque Importar -> Opción “¿Qué tipo de entidad desea importar?” y vemos que ahora tenemos una nueva opción denominada: “NewPriceListImport” que antes no existía, señalamos esa opción.

Opciones de importación en Prestashop

No se os olvide subir el fichero CSV que vamos a importar, en la misma sección donde dice “Elige un archivo CSV para importar“.

Subir fichero CSV en la importación

Seleccionamos el fichero a importar que contiene los datos con los precios y referencias de los productos.

Seleccionar Fichero CSV a Importar

Pulsamos “Próximo Paso / Siguiente” para proseguir con el proceso de importación de productos en Prestashop.

Próximo paso en la importación

Verificamos que los datos a importar para actualizar los precios (importamos precios sin impuestos incluidos) son los correctos y pulsamos en Importar datos CSV Continúa leyendo Actualizar masivamente precios en base a la referencia en Prestashop

Redireccionar al cliente cuando cierra sesión en Prestashop

Redireccionar al cliente al cerrar sesión en Prestashop

Antes de nada, nosotros vamos a tocar controladores y clases originales, pero recordar que lo optimo es hacer los correspondientes overrides (/override/clases/ si es una clase y /override/controllers/ si es un controlador)

Este miniTip, está realizado bajo Prestashop 1.6

Por ejemplo, vamos hacer que cuando el cliente cierre sesión en la tienda sea redireccionado a una página de contenidos que hemos creado en la pestaña Preferencias -> CMS

Editamos el fichero:

  • classes/controller/FrontController.php

Buscamos la siguiente línea de código: (En Prestashop 1.6.1.12 sobre la línea 295/298)

elseif (isset($_GET['mylogout'])) {
$this->context->customer->mylogout();
Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);
}
Código PHP de cuando el cliente cierra sesión en Prestashop.

Y cambiamos la línea:

Tools::redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null);

por:

$enlace =$this->context->link->getCMSLink(3);
Tools::redirect($enlace);
  • Variable “Enlace” almacena el enlace de la página de contenidos.
  • Al ejecutar “Tools::redirect” ejecutamos la redirección, en este caso al valor que contiene la variable enlace.

Continúa leyendo Redireccionar al cliente cuando cierra sesión en Prestashop

Evitar que el cliente reciba el email de confirmación en Prestashop

Cuando el cliente compra en Prestashop, automáticamente recibe un email con la confirmación del pedido con el resumen de su pedido.

Email del pedido en Prestashop

¿Cómo podemos desactivar que el cliente no reciba ese correo?

En este caso, vamos hacer el TIP bajo Prestashop 1.6.

Vamos a tocar la clase original, pero recordar que lo ideal es hacer un override la clase en “/override/classes/

Editamos el fichero:

/classes/PaymentModule.php

Y buscamos el siguiente código:

if (Validate::isEmail($this->context->customer->email)) {
Mail::Send(
(int)$order->id_lang,
'order_conf',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$this->context->customer->email,
$this->context->customer->firstname.' '.$this->context->customer->lastname,
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);
}
Código envío email de configuración en Prestashop

Y en este “mini-ejemplo” comentamos el código: Continúa leyendo Evitar que el cliente reciba el email de confirmación en Prestashop

Mostrar contenidos CMS en los productos en Prestashop

Si queremos mostrar el contenido de unas de las páginas que hemos creado en la pestaña Preferencias -> CMS en la ficha del producto, podemos hacer lo siguiente.

En este TIP, vamos a tocar clases/controladores original, recordar que lo ideal es hacer un override y nunca tocar una clase y controlador original.

Ejemplo en Prestashop 1.6

Vamos al fichero:

/controllers/front/ProductController.php

Dentro de la función:

public function initContent()

Buscamos la línea: (Sobre la línea 293 por ejemplo en las ultimas variantes actuales de la 1.6)

$this->context->smarty->assign(array(
'stock_management' => Configuration::get('PS_STOCK_MANAGEMENT'),

Y añadimos encima:


$cms_contenido = new CMS(ID CMS, $this->context->language->id, $this->context->shop->id),

Vamos a obtener los datos del CMS con ID 3 (que en nuestro caso es el relativo a Términos y condiciones)

Ahora buscamos la siguiente línea en la misma función


));
}
$this->setTemplate(_PS_THEME_DIR_.'product.tpl');

Y justo encima añadimos:

'cms_contenido' => $cms_contenido,

Hemos asignado el contenido del array donde almacenamos los valores de la página de contenidos a una variable que vamos a usar luego en el tpl.

Ahora ya podemos hacer uso de la variable “cms_contenido” en el fichero:

/themes/default-bootstrap/product.tpl

Si hacemos un “var_dump” de la variable, podemos ver las opciones que nos permite la variable a la hora de imprimir el ID, contenidos, etc.. del CMS en cuestión.

{$cms_contenido|var_dump}

Por ejemplo:

Imprimir contenido del CMS en la ficha del producto en Prestashop

{$cms_contenido->content}

Imprimir título del CMS en Prestashop

{$cms_contenido->meta_title}

Ah, se me olvidaba indicaros que en este caso hemos tocado la inicio del TIP el controlador original y lo ideal es hacer un override del controlador en:

/override/controllers/front