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

 

Print Friendly

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

Sigue leyendo

Print Friendly

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 controlador “AdminImportController.php” (/override/controllers/admin/)

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

No, no tiene 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 haya 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 nos 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 (recuerda importamos precios sin impuestos incluidos) son los correctos y pulsamos en “Importar datos CSV” Sigue leyendo

Print Friendly

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.

Sigue leyendo

Print Friendly

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: Sigue leyendo

Print Friendly

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

Print Friendly

Mostrar productos en páginas CMS en Prestashop

No recuerdo si en el pasado, hicimos una reseña en el blog de un módulo del usuario Vekia de la Comunidad de Prestashop que permite mostrar en la ficha de todos los productos una página CMS que hemos creado en la pestaña Preferencias -> CMS (En 1.7 Diseño -> Paginas)

El módulo es totalmente gratuito, y es compatible con Prestashop 1.6 / 1.7

La instalación del módulo, la hacemos desde la pestaña Módulos -> Módulos, como suele ser habitual.

Una vez instalado, simplemente nos dirigimos a la pestaña Diseño -> Páginas (en Prestashop 1.7), modificamos o creamos un contenido y por ejemplo para mostrar un producto concreto escribimos la siguiente etiqueta:

{product:idProducto}
Ficha del producto en contenidos en Prestashop 1.7

Ficha del producto en contenidos en Prestashop 1.7

Donde hemos indicamos “idProducto”, indicamos lógicamente el ID del producto que queremos que se vea en dicha página de contenidos.

Sí nos vamos a ver esa página en nuestra tienda, la veremos de la siguiente forma:

El módulo lo podemos descargar aquí: Descargar módulo

Enlaces de emergencia por si en algún momento falla la web de Vekia. (PS 1.6 / PS 1.7), recordar siempre descargarlo desde la web de Vekia, ya que es donde se mantendrá siempre actualizado para las diferentes versiones/variantes de Prestashop

Print Friendly

He actualizado a PHP 7.1 y mi tienda Prestashop 1.6 me reporta errores

Si no estáis trabajando con las ultimas variante en actualizaciones de Prestashop de la versión 1.6 de Prestashop, es posible que os hayáis encontrado con algunos reporte de errores debido a la versión 7.1 de PHP

Notice: Array to string conversion in /…/classes/Hook.php…

Si estáis trabajando con Prestashop 1.6.1.11 o con anteriores variantes de Prestashop 1.6  y no con Prestashop 1.6.1.12 (porque esta versión ya lo lleva integrado los dos cambios que  se proponen en este artículo.)

En github: https://github.com/PrestaShop/PrestaShop/pull/7392 tenemos propuesto los siguientes cambios:

Fichero:

classes/Hook.php

Sobre la línea (465)

Cambiamos este código:

$output = '';
if ($array_return) {
$output = array();
} else {
$output = '';
}

También, nos recomiendan cambiar el fichero:

classes/helper/HelperOptions.php

(Sobre la línea 105)

Cambiar esto:

if ($field['type'] == 'texarea' || $field['type'] == 'textareaLang') {

por

if ($field['type'] == 'textarea' || $field['type'] == 'textareaLang') {

En realidad, estos cambios ya están implementados en la última variante de la 1.6 de Prestashop a día de hoy, pero para aquellas personas que estén usando por ejemplo la 1.6.1.10 no están implementados.

Lo dicho, intentar siempre tener vuestra versión (variante) de Prestashop actualizada, es decir si estáis usando la 1.6, estar siempre actualizados a la ultima variante de Prestashop 1.6, y si estáis usando la versión 1.7 de Prestashop, estar siempre actualizados a la última variante de la Prestashop 1.7

Enlace de github, donde se trata este problema: https://github.com/PrestaShop/PrestaShop/pull/7392

Print Friendly

Limitar número de productos en el carrito en Prestashop

Traducción de la guía realizada por el usuario Nemo de la Comunidad de Prestashop

Limitar números de productos en el carrito en Prestashop 1.6

Limitar número de productos en el carrito en Prestashop 1.6

Según nos indica Nemo, el tutorial es para Prestashop 1.6

Imaginemos que queremos que, en el carrito, no puedan existir más de 5 productos en total.

Recordamos que lo mejor es hacer un override de los Clases y Controladores que se vayan a modificar.

En el fichero:

/controllers/front/CartController.php

Dentro de la función:

processChangeProductInCart


Debajo de la línea: (En Prestashop 1.6.1.12, sobre la línea 241)

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

Añadimos la siguiente

$total_cart_produtcs_count=0;

Ahora un poco más abajo, donde tenemos esta línea:

foreach ($cart_products as $cart_product) {

Añadimos:

$total_cart_produtcs_count+=$cart_product['cart_quantity'];

Almacenamos en la variable total_cart_produtcs_count el número total de productos que se van añadiendo al carrito.

Ahora justo antes de este comentario:

// Check product quantity availability

Añadimos:

$max_qty = 5;
		if(Tools::getValue('op', 'up')=='up' && $mode=='add')
		{
			if (count($cart_products) == $max_qty || $total_cart_produtcs_count + $this->qty > $max_qty)
				$this->errors[] = sprintf(Tools::displayError('El limite de productos en el carrito son %s'), $max_qty);
		}

  • En la variable “max_qty” indicamos el límite máximo de productos que se pueden añadir al carrito.
  • En el primero IF se chequea cuando se añade/actualiza productos al carrito.
  • En el segundo IF contamos los productos añadidos al carrito y los comparamos con el límite que hemos establecido
  • Si se cumplen los dos IF, imprimimos el mensaje de que se ha llegado al límite de productos que se pueden añadir al carrito.

Esta traducción, puede contener errores o quedar desactualizada en el momento en el que vayáis a ver este post, revisarla siempre con el tutorial de Nemo:

Imagen de previsualización de YouTube
Print Friendly

Unificar anchura de los métodos de pago en el listado en Prestashop

En algunos post del foro, hace varios años fui comentando casos parecidos…

Guía basada en Prestashop 1.6 con la plantilla por defecto.

Llegado un momento, es posible que cuando vayamos a visualizar los métodos de pago, a la hora de elegir cual queremos para completar la compra, veamos que el ancho es diferente en cada uno de los bloques y no queda muy bien estéticamente.

En este ejemplo, tenemos instalado 4 módulos, que son, el Módulos de Contrareembolso, de Transferencia Bancaria, de Contra-Reembolso (Estos vienen por defecto en Prestashop) y el módulo de iupay (versión 2.8.3) descargado de la web de Redsys


En esta imagen, vemos que la anchura del módulo de “iupay” no es la misma que  la del resto de módulos.

La solución es la siguiente (en este caso).

1º Hacer override del tpl del módulo de esa parte en tu plantilla.

Copiar el fichero:

“/modules/iupay/views/templates/hook/payment.tpl”

En:

“/themes/default-bootstrap/modules/iupay/views/templates/hook/” (La estructura de directorios del módulo la tenéis que crear en vuestra plantilla.)

2º Modificar: “/themes/default-bootstrap/modules/iupay/views/templates/hook/payment.tpl”

Cambiar en el fichero la siguiente instrucción:

<div class="col-xs-12 col-md-6">

por

<div class="col-xs-12">

Finalmente quedara de la siguiente forma:

Esto es solo un Ejemplo, es posible que en vuestro caso sea debido a otro problema, tenéis que fijaros en la estructura de otros módulos, como por ejemplo el de transferencia bancaria:

/themes/default-bootstrap/modules/bankwire/views/templates/hook/payment.tpl

Y adaptar la estructura básica al vuestro.

Print Friendly