Mostrar el resumen del pedido en la página confirmación de pedido de Prestashop 1.6

19 junio, 2015 |

Si te gusta, compártelo ;)

Insertar hooks en páginas cms de prestashop 1.6, vista previa

A los clientes les gusta la información, y a la mayoría no le importaría ver un resumen de su compra justo antes de confirmar un pedido, es por ello, que en este tutorial vamos a aprender a mostrar un resumen del pedido en la página de confirmación de pedido de Prestashop 1.6.


Compatibilidad: Prestashop 1.5 y
Prestashop 1.6

Descargar el módulo

Creación de un módulo sencillo

La mejor forma de añadir nuevos elementos a la página de confirmación del pedido, en Prestashop, es a través de un módulo muy simple que se conecta al hook orderConfirmation. El código del módulo no es muy díficil de comprender.

En primer lugar, debemos descargar el archivo del módulo desde el enlace que veis más arriba. Extraer la carpeta psconfresume del archivo comprimido. A continuación, pegarla en el directorio modules de nuestra carpeta prestashop.

Una vez copiada la carpeta psconfresume en el directorio modules, busquemos el archivo psconfresume.php y abrámoslo con nuestro editor de código favorito.

Veremos lo siguiente:

<?php

if (!defined('_PS_VERSION_'))
 exit;

class psConfResume extends Module
{

 protected $_errors = array();


 public function __construct()
 {
  $this->name = 'psconfresume';
  $this->tab = 'front_office_features';
  $this->version = '1.0';
  $this->author = 'Nemo';
  $this->need_instance = 0;


  $this->bootstrap = true;


   parent::__construct();

  $this->displayName = $this->l('psconfresume');
  $this->description = $this->l('Adds a block.');
  $this->confirmUninstall = $this->l('Are you sure you want to delete this module?');
 }
 
 public function install()
 {
  if (!parent::install() OR
   !$this->registerHook('orderConfirmation')
   )
   return false;
  return true;
 }
 
 public function uninstall()
 {
  if (!parent::uninstall())
   return false;
  return true;
 }
 
}

Este código contiene solo las funciones básicas de cualquier módulo. Debemos crear una función para anclar el módulo al hook OrderConfirmation

Creando la función para el hook

Debemos copiar el siguiente método justo antes de la llave de cierre de la clase:

public function hookOrderConfirmation($params)
{
 
    $order = $params['objOrder'];
    $products = $order->getProducts();
 
    $this->context->smarty->assign(array(
        'order'=> $order,
        'order_products' => $products
    ));
     
    return $this->display(__FILE__, 'confirmation.tpl');
}

No hay nada de especial en este código. En primer lugar nos aprovechamos del objeto order que viene a través de la matriz $params, y la utilizamos para obtener más detalles sobre los productos solicitados. Esto lo hacemos a través de la variable $products, que obtendrá los datos de los productos.

A continuación asignamos las variables para la plantilla .tpl mediante $this->context->smarty->assign(). Veamos ahora el código de la plantilla.

La tabla con el resumen del pedido

Abrir el archivo confirmation.tpl situado en la ruta ../prestashop/modules/psconfresume/views/templates/hook.
Veremos la siguiente tabla:

<table class="std">
  <thead>
   <tr>
    <th>{l s='Product' mod='psconfresume'}</th>
    <th>{l s='Price' mod='psconfresume'}</th>
    <th>{l s='Qty' mod='psconfresume'}</th>
   </tr>
  </thead>
  <tbody>
   {foreach from=$order_products item=product}
    <tr>
     <td>{$product.product_name}</td>
     <td>
      {if $use_taxes}
       {displayPrice price=$product.total_price_tax_incl}
      {else}
       {displayPrice price=$product.total_price_tax_excl}
      {/if}
     </td>
     <td>{$product.product_quantity}</td>
    </tr>
   {/foreach}
  </tbody>
  <tfoot>
   <tr>
    <td style="text-align:right">
     {l s='Products Total' mod='psconfresume'}
    </td>
    <td colspan="2">
     {if $use_taxes}
      {displayPrice price=$order->total_products_wt}
     {else}
      {displayPrice price=$order->total_products}
     {/if}
  
    </td>
  </tr> 
  <tr>
   <td style="text-align:right">
    {l s='Shipping' mod='psconfresume'}
   </td>
   <td colspan="2">
    {if $use_taxes}
     {displayPrice price=$order->total_shipping_tax_incl}
    {else}
     {displayPrice price=$order->total_shipping_tax_excl}
    {/if}
  
  </td>
  </tr>
   {if $order->total_discounts != '0.00'}
    <tr>
     <td style="text-align:right">
      {l s='Discounts' mod='psconfresume'}
     </td>
    <td colspan="2">-
     {if $use_taxes}
      {displayPrice price=$order->total_discounts_tax_incl}
     {else}
      {displayPrice price=$order->total_discounts_tax_excl}
  {/if}
     </td>
    </tr>
  {/if}
  {if $use_taxes}
   <tr>
    <td style="text-align:right">
     {l s='Taxes Paid' mod='psconfresume'}
   </td>
  <td colspan="2">
   {$taxamt = $order->total_paid_tax_incl - $order->total_paid_tax_excl}
    {displayPrice price=$taxamt}

</td> </tr> {/if} <tr> <td style="text-align:right"> {l s='TOTAL' mod='psconfresume'} </td> <td colspan="2"> {if $use_taxes} {displayPrice price=$order->total_paid_tax_incl} {else} {displayPrice price=$order->total_paid_tax_excl} {/if} </td> </tr> </tfoot> </table>

En este código creamos una tabla con el nombre del producto, el precio y la cantidad como cabeceras. Luego, en el cuerpo, recorremos mediante un bucle los productos correspondientes y mostramos lo que necesitamos. Por último, en la etiqueta tfoot insertamos los gastos de envío, los descuentos e impuestos, y el total.

Cabe destacar que estamos utilizando la variable $use_taxes para comprobar si se están utilizando impuestos o no. Aquí se muestra a modo de tabla, aunque se podrían utilizar etiquetas div.

Y con esto terminamos, solo queda realizar un pedido de prueba y comprobar si funciona. Suerte!

Resumen del pedido en la página de confirmación de pedido en Prestashop
El módulo disponible aquí para descarga no es de mi autoría.

No hay comentarios: