Ocultar precios a usuarios no registrados en PrestaShop
A la hora de configurar nuestro sitio web con PrestaShop, éste ofrece diversas posibilidades para ofrecer nuestros productos, ya sea a modo de catálogo online, sin precios y sin carritos (proceso de compra) o como tienda online. Además, dentro de PrestaShop también podemos definir diferentes tipos de clientes, que pueden ser, por defecto, de tres tipos:
- Visitor: visitantes en la web que no han iniciado la sesión.
- Guest: clientes invitados (si está habilitada en la tienda la opción de comprar sin registrarse, éstos serán los invitados).
- Customer: clientes registrados.

Vista de los grupos por defecto en PrestaShop 1.5

Vista de los grupos por defecto en PrestaShop 1.6
Por norma general, PrestaShop permite que cada uno de estos grupos de clientes pueda tener diferentes opciones de configuración: pueden tener un descuento distinto (tanto general en la web como por categoría), podemos seleccionar la posibilidad de que vean los precios o no, de que los vean con o sin impuestos, que tengan acceso a determinados módulos (mejores ventas, publicidad, contacto, …).

Diferentes opciones de configuración de grupos de clientes en PrestaShop 1.5

Diferentes opciones de configuración de grupos de clientes en PrestaShop 1.6
Una vez visto esto, no deberíamos tener problemas para configurar nuestra tienda en PrestaShop para que los usuarios no registrados (no iniciadas sus sesiones) no vean los precios de nuestros productos, y que cuando hayan iniciado la sesión, puedan ver los precios de todos los productos.
El problema surge cuando queremos que los clientes no registrados no vean los precios de algunos productos concretos. La solución a esto podría ser modificar los ficheros de PrestaShop (del tema) para que no muestre los precios cuando no se den las condiciones que queremos.
No mostrar los precios de una categoría en Prestashop
En el caso que vamos a ver a continuación, no mostraremos los precios de los productos de una categoría determinada a los usuarios que no hayan iniciado sesión en nuestro sitio web. Esta modificación, también podría hacerse filtrando por características, proveedores o cualquier otro dato que tenga el producto y que nos permita filtrar.
Para este ejemplo, vamos a realizar las modificaciones sobre el tema por defecto en PrestaShop, ya que es común a todas las instalaciones (estos cambios se pueden hacer en cualquier tema, adaptándolos si fuese necesario).
Primero vamos a ver las plantillas Smarty (básicas) que entran en juego para mostrarnos los productos y que, por tanto, debemos modificar:
- themes/default/product.tpl: es la plantilla de PrestaShop que muestra la información de cada producto. Es usada para la ficha o vista de cada producto.
- themes/default/product.list.tpl: esta plantilla de PrestaShop lista productos, mostrando una breve información de cada uno. Es usada para listar los productos de las categorías, búsquedas, etc…
- themes/default/modules/blockspecials/blockspecials.tpl: es la plantilla del módulo de PrestaShop “Bloque de promociones especiales” que muestra una breve información de cada producto que esté en promoción.
Empezaremos modificando la plantilla de la información del producto (themes/default/product.tpl). Para simplificar las modificaciones, nos crearemos una variable en Smarty (en este caso fra_showprice) para saber si el producto pertenece a la categoría que nos interesa (en este caso tendrá el id 3) y si el usuario no ha iniciado sesión. Asignaremos a dicha variable el valor 0 si se cumple la condición, y 1 en caso contrario:
{if !$logged && $product->id_category_default == 3} {assign var='fra_showprice' value=0} {else} {assign var='fra_showprice' value=1} {/if}
Una vez ya sepamos si se cumplen las condiciones que queríamos para mostrar o no los precios, debemos ocultar el precio (así como la opción de añadir al carrito) si es cierto (buscad los id de los div, span o p para orientaros en el código):
{if $fra_showprice} <span id="our_price_display">{convertPrice price=$productPrice}</span> <!--{if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label))} {if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if} {/if}--> {/if} ... {if $fra_showprice} specificPrice OR $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}><span id="reduction_percent_display">{if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if}</span> specificPrice OR $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|intval ==0} style="display:none"{/if}> <span id="reduction_amount_display"> {if $product->specificPrice AND $product->specificPrice.reduction_type == 'amount' AND $product->specificPrice.reduction|intval !=0} -{convertPrice price=$productPriceWithoutReduction-$productPrice|floatval} {/if} </span> specificPrice || !$product->specificPrice.reduction} class="hidden"{/if}> {if $priceDisplay >= 0 && $priceDisplay <= 2} <span id="old_price_display">{if $productPriceWithoutReduction > $productPrice}{convertPrice price=$productPriceWithoutReduction}{/if}</span> <!-- {if $tax_enabled && $display_tax_label == 1}{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if} --> {/if} {/if} ... {if $fra_showprice} quantity <= 0) OR !$product->available_for_order OR (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}style="display:none"{/if} class="buttons_bottom_block"> <input class="exclusive" type="submit" name="Submit" value="{l s='Add to cart'}" /> {/if}
Tras realizar estas modificaciones, ya tendremos la vista de los productos como queríamos, pero aún nos quedan por modificar dos vistas más.
La siguiente es themes/default/product.list.tpl. Para simplificar, al principio haremos como en la plantilla del producto, guardarnos una variable con el resultado de la evaluación de la condición deseada (¡CUIDADO!, en este caso no podemos poner la modificación al principio, deberemos ponerla en la primera línea dentro del bucle que recorre los productos {foreach from=$products item=product name=products}
):
{if !$logged && $product.id_category_default == 3} {assign var='fra_showprice' value=0} {else} {assign var='fra_showprice' value=1} {/if}
A continuación, igual que hemos hecho antes, tenemos que “ocultar” el precio cuando no nos interese (buscad los id de los div, span o p para orientaros en el código):
<div class="right_block"> {if $fra_showprice} {if isset($product.on_sale) && $product.on_sale && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="on_sale">{l s='On sale!'}</span> {elseif isset($product.reduction) && $product.reduction && isset($product.show_price) && $product.show_price && !$PS_CATALOG_MODE}<span class="discount">{l s='Reduced price!'}</span>{/if} {/if} {if (!$PS_CATALOG_MODE AND ((isset($product.show_price) && $product.show_price) || (isset($product.available_for_order) && $product.available_for_order)))} <div class="content_price"> {if $fra_showprice} {if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}<span class="price" style="display: inline;">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span><br />{/if} {/if} {if isset($product.available_for_order) && $product.available_for_order && !isset($restricted_country_mode)}<span class="availability">{if ($product.allow_oosp || $product.quantity > 0)}{l s='Available'}{elseif (isset($product.quantity_all_versions) && $product.quantity_all_versions > 0)}{l s='Product available with different options'}{else}<span class="warning_inline">{l s='Out of stock'}</span>{/if}</span>{/if} </div> {if isset($product.online_only) && $product.online_only}<span class="online_only">{l s='Online only'}</span>{/if} {/if} {if ($product.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $product.available_for_order && !isset($restricted_country_mode) && $product.minimal_quantity <= 1 && $product.customizable != 2 && !$PS_CATALOG_MODE} {if $fra_showprice} {if ($product.allow_oosp || $product.quantity > 0)} {if isset($static_token)} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$product.id_product|intval}&token={$static_token}", false)|escape:'html'}" title="{l s='Add to cart'}"><span></span>{l s='Add to cart'}</a> {else} <a class="button ajax_add_to_cart_button exclusive" rel="ajax_id_product_{$product.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$product.id_product|intval}", false)|escape:'html'}" title="{l s='Add to cart'}"><span></span>{l s='Add to cart'}</a> {/if} {else} <span class="exclusive"><span></span>{l s='Add to cart'}</span><br /> {/if} {/if} {/if} <a class="button lnk_view" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a> </div>
Ya sólo nos queda modificar la plantilla themes/default/modules/blockspecials/blockspecials.tpl. Al igual que las dos veces anteriores, nos guardamos en una variable un valor para saber si debemos o no mostrar los precios. En este caso, los datos de los productos no están dentro de la variable Smarty $producto (o $productos), sino en $special (por lo que sería recomendable ejecutar el código después de la comprobación es esta variable):
{if $special} {if !$logged && $special.id_category_default == 3} {assign var='fra_showprice' value=0} {else} {assign var='fra_showprice' value=1} {/if}
Ahora ya sólo nos queda ocualtar el precio si así lo queremos (buscad los id de los div, span o p para orientaros en el código):
{if $fra_showprice} {if !$PS_CATALOG_MODE} {if $special.specific_prices} {assign var='specific_prices' value=$special.specific_prices} {if $specific_prices.reduction_type == 'percentage' && ($specific_prices.from == $specific_prices.to OR ($smarty.now|date_format:'%Y-%m-%d %H:%M:%S' <= $specific_prices.to && $smarty.now|date_format:'%Y-%m-%d %H:%M:%S' >= $specific_prices.from))} <span class="reduction"><span>-{$specific_prices.reduction*100|floatval}%</span></span> {/if} {/if} {/if} {/if} <a title="{$special.name|escape:html:'UTF-8'}" href="{$special.link|escape:'html'}">{$special.name|escape:html:'UTF-8'}</a> {if $fra_showprice} {if !$PS_CATALOG_MODE} <span class="price-discount">{if !$priceDisplay}{displayWtPrice p=$special.price_without_reduction}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl}{/if}</span> <span class="price">{if !$priceDisplay}{displayWtPrice p=$special.price}{else}{displayWtPrice p=$special.price_tax_exc}{/if}</span> {/if} {/if}
Con estas sencillas modificaciones, lograremos personalizar más nuestra tienda Prestashop y adaptarla a todos nuestros tipos de clientes.
¿Te ha servido este tutorial? ¡Compártelo!
Comentarios
No hay comentarios todavía.