• Skip to primary navigation
  • Skip to main content

Manuel Ramos

Especialista en PrestaShop

  • Soporte PrestaShop
  • Acerca de mí
  • Blog
  • Contacto

Cómo modificar Transporte Gratis en carrito de compras en PrestaShop 1.7

Publicado: julio 10, 2019

En este tutorial vamos a modificar esto:

Valor de nuestro transportista predeterminado a un usuario visitante

Por esto:

Personalización de Transporte a un usuario visitante o cliente sin una dirección registrada

Si esto es lo que estas buscando, como buena práctica debes hacer los siguientes cambios en un child theme (tema hijo).

Artículo sigue funcionando para la versión 1.7.6.8

Nota: tomar en cuenta que en este post utilizaré la versión 1.7.5.2 y el tema Classic de PrestaShop, si tienes el mismo tema y la misma versión no deberías tener inconvenientes para ubicar los ficheros en la misma ruta, si tienes otro tema toma en consideración las clases de los ficheros que utiliza tu tema.

Nota: para mostrar el precio únicamente cuando el usuario inicie sesión o cuando obtenemos aunque sea una dirección independientemente si es un usuario registrado o visitante, utilizaremos una sentencia condicional en 3 archivos:

  • cart-detailed-totals.tpl
  • cart-summary.tpl
  • modal.tpl

Sentencia condicional

En programación hay muchas formas de hacer lo mismo, yo lo he hecho de la siguiente forma y utilizo la siguiente condicional, ya que en muchas tiendas online el valor del envió que el cliente debe pagar varia dependiendo de la ciudad de destino.

Si tu tienda online es un caso particular con respecto a lo que quieres mostrar espero que el siguiente código y los ficheros a modificar te ayude a tener una idea para trabajar.

La condicional indica que si el cliente ha iniciado sesión o tenemos aunque sea una dirección, ya que muchos usuarios registrados pueden tener varias direcciones o un usuario también puede comprar como invitado pues mostrará todos los valores que tu tengas configurado en tu transportista para esa ciudad.

Si nada de esto se cumple va a mostrar todos los valores excepto el tipo ‘shipping’ que se reemplazará por el texto que tu desees, como por ejemplo: Por calcular hasta que se obtenga una dirección registrada en la cuenta del usuario o durante el checkout.

{if $customer.is_logged && $customer.addresses|count > 0}
	<span class="value">{$subtotal.value}</span>
	{if $subtotal.type === 'shipping'}
	<div><small class="value">{hook h='displayCheckoutSubtotalDetails' subtotal=$subtotal}</small></div>
	{/if}
{else}
	{if $subtotal.type !== 'shipping'}
		<span class="value">{$subtotal.value}</span>
	{else}
		<span class="value">{l s='Por calcular'}</span>
	{/if}	
{/if}

Modificando el archivo cart-detailed-totals.tpl

ruta: tutema/templates/checkout/_partials/cart-detailed-totals.tpl

Ubica la condicional: {if $subtotal.type === ‘shipping’}

<div class="card-block">
  {foreach from=$cart.subtotals item="subtotal"}
    {if $subtotal.value && $subtotal.type !== 'tax'}
      <div class="cart-summary-line" id="cart-subtotal-{$subtotal.type}">
        <span class="label{if 'products' === $subtotal.type} js-subtotal{/if}">
          {if 'products' == $subtotal.type}
            {$cart.summary_string}
           {else}
             {$subtotal.label}
           {/if}
         </span>

         {if $customer.is_logged && $customer.addresses|count > 0}
           <span class="value">{$subtotal.value}</span>
           {if $subtotal.type === 'shipping'}
             <div><small class="value">{hook h='displayCheckoutSubtotalDetails' subtotal=$subtotal}</small></div>
           {/if}
         {else}
           {if $subtotal.type !== 'shipping'}
             <span class="value">{$subtotal.value}</span>
           {else}
             <span class="value">{l s='Por calcular'}</span>
           {/if}	
         {/if}

       </div>
     {/if}
   {/foreach}
</div>
Modificación exitosa de archivo cart-detailed-totals.tpl

Modificando el archivo cart-summary.tpl

ruta: tutema/templates/checkout/_partials/cart-summary.tpl

Ubica el bloque: {block name=’cart_summary_subtotals’}

{block name='cart_summary_subtotals'}
   {foreach from=$cart.subtotals item="subtotal"}
      {if $subtotal && $subtotal.type !== 'tax'}
         <div class="cart-summary-line cart-summary-subtotals" id="cart-subtotal-{$subtotal.type}">
            <span class="label">{$subtotal.label}</span>

            {if $customer.is_logged && $customer.addresses|count > 0}
               <span class="value">{$subtotal.value}</span>
               {if $subtotal.type === 'shipping'}
                  <div><small class="value">{hook h='displayCheckoutSubtotalDetails' subtotal=$subtotal}</small></div>
               {/if}
            {else}
               {if $subtotal.type !== 'shipping'}
                  <span class="value">{$subtotal.value}</span>
               {else}
                  <span class="value">{l s='Por calcular'}</span>
               {/if} 
            {/if}

         </div>
      {/if}
   {/foreach}
{/block}
Modificación exitosa de archivo cart-summary.tpl

Modificando el archivo modal.tpl

ruta: tutema/modules/ps_shoppingcart

Ubica {$cart.subtotals.shipping.value}

La condicional de modal.tpl es más sencilla, el código quedaría de la siguiente forma:

<strong>{l s='Total shipping:' d='Shop.Theme.Checkout'}</strong> 
  {if $customer.is_logged && $customer.addresses|count > 0}
    {$cart.subtotals.shipping.value} {hook h='displayCheckoutSubtotalDetails' subtotal=$cart.subtotals.shipping}
  {else}
    {l s="Por calcular"}
  {/if}
Modificación exitosa de archivo modal.tpl

Con esto hemos terminado la configuración, recuerda crear los archivos en tu tema hijo, por ejemplo en el caso de cart-summary el código que tendrá cart-summary.tpl en nuestro tema hijo sería de la siguiente forma:

{extends file='parent:/checkout/_partials/cart-summary.tpl'}

{block name='cart_summary_subtotals'}
   {foreach from=$cart.subtotals item="subtotal"}
      {if $subtotal && $subtotal.type !== 'tax'}
         <div class="cart-summary-line cart-summary-subtotals" id="cart-subtotal-{$subtotal.type}">
            <span class="label">{$subtotal.label}</span>
      
            {if $customer.is_logged && $customer.addresses|count > 0}
               <span class="value">{$subtotal.value}</span>
               {if $subtotal.type === 'shipping'}
                  <div><small class="value">{hook h='displayCheckoutSubtotalDetails' subtotal=$subtotal}</small></div>
               {/if}
            {else}
               {if $subtotal.type !== 'shipping'}
                  <span class="value">{$subtotal.value}</span>
               {else}
                  <span class="value">{l s='Por calcular'}</span>
               {/if} 
            {/if}
         </div>
      {/if}
   {/foreach}
{/block}

Espero que esta información te sea útil y si tienes alguna duda me puedes contactar a través del formulario de contacto.

Saludos!

© 2021 Manuel Ramos | Aviso legal

  • Podcast
  • LinkedIn
  • Dribbble