Recientemente me pidieron de que no se mostrara el precio de la entrega en el carrito de la compra hasta que no se elija una opción de entrega.

En este caso particular, la tienda online tiene dos metodologia de entrega:

1) Gratis (recogida en tienda)

2) Entrega MRW a 6 Euros

y siempre se calculaba el total del pedido con los 6 Euros de entrega.

Prestashop, en la parte da administrador, no ofrece la posibilidad de cambiar esta opción particular, para hacerlo hay que meter mano al código y personalizarlo para esta necesitad.

El primer paso a seguir es poner la entrega gratis como entrega por defecto desde el backhand:

1) login in Prestashop

2) Ir al Menu Shipping->Carrier

3) Selecionar un Default Carrier desde la Sección “Carrier Options”

4) Guardar los cambios

Este cambio nos asegura que cualquier producto un usuario añada al carro tenga un precio de entrega zero, y Prestashop lo considera como un free shipping.

Ahora tenemos que decir al Modulo del Carrito “blockcart”,  y a el template “shopping-cart.tpl” que representa la vista general del carrito en la parte central de nuestra tienda virtual, que si el precio de entrega es zero no mostramos lo mostramos del todo.

shopping-cart.tpl Original

...
{if $total_shipping_tax_exc <= 0 && !isset($virtualCart)}
 <tr class="cart_total_delivery">
 <td colspan="5">{l s='Shipping:'}</td>
 <td colspan="2" class="price" id="total_shipping">{l s='Free Shipping!'}</td>
 </tr>
 {else}
...

shopping-cart.tpl Modificado

...
{if $total_shipping_tax_exc <= 0 && !isset($virtualCart)}
 //borramos todo el contenido del "if"
 {else}
...

Vista con shopping-cart.tpl Originale

Vista con Shopping-cart.tpl modificado:

como podeis ver, ahora no tenemos más la linea de los costes de entrega.

Todavia no hemos acabado… porqué aún hay que modificar el carrito de la compra donde se insegna el shipping cost, vamos a ver como modificarlo.

Habrimos el fichero /modules/blockcart/blockcart.tpl 

<p id="cart-prices">
<span id="cart_block_shipping_cost" class="price ajax_cart_shipping_cost">{$shipping_cost}</span>
<span>{l s='Shipping' mod='blockcart'}</span>

y lo modificamos añadiendo estas dos linea:

{if $shipping_cost > 0}
<p id="cart-prices">
<span id="cart_block_shipping_cost">{$shipping_cost}</span>
<span>{l s='Shipping' mod='blockcart'}</span>
{/if}

Esto nos asegura que no se cargará en el carrito ajax el coste de entrega si es zero:

Antes: Despues:

Podemos ver que en la parte final si elegimos la entrega gratis aparecerá solamente en la parte finale del pago:

Si elegimos la opción de entra con MRW, entonces nos aparecerá en la pantalla final el precio:

La estructura de las clases de base de prestashop es bastante rigida, estaria bien poner todo este processo del carrito de la compra en un modulo, así que daría mas flexibilidad a los programadores de hacer unos modulos personalizados sin tocar los ficheros del “core”.

Obviamente si vamos a tocar alguna clase dentro de la carpeta /controller  o de la carpeta /classes, nos ariesgamos que con una actualización de Prestashop, nuestros cambios se pierdan y dejen un sistema inestable.

Modificando los archivos template, como hice en este ejemplo es más seguro, pero hay que ir con quidado también porqué si bajamos una actualización del “blockcart”, nos borrará nuestros cambios.

Siempre es prudente hacer una copia de lo que hemos modificado y guardarlo en un backup que igual nos podrá tornar muy util.