Jump to content

Ocultar/esconder productos sin stock (Solucionado)


Recommended Posts

Hola,

 

Me gustaría saber so me pueden echar un cable con lo siguiente:

 

Quiero ocultar o “esconder” los productos de la tienda que no tengan stock (en PS 1.5), pero no los quiero desactivar, de manera que se sigan mostrando si alguien accede a través de la URL del producto (aunque el producto muestre el texto “Este producto ya no se encuentra en stock”).

 

Sólo quiero que no se muestren en el frontend pero que si un usuario encuentra la URL del producto a través de los buscadores haga click y vaya a la página del producto, no quiero desactivar el producto ya que mostraría “Producto no encontrado”, tampoco quiero redireccionar a la home u otra página.

 

Las razones:

 

1.- Vendemos productos únicos, por ejemplo, vendemos anillos, podemos tener 1000 anillos pero sólo tenemos un Anillo Ref. Y423111 otro anillo Ref. Y4875413 y así sucesivamente hasta el anillo número 1000. NO tenemos más de una unidad por referencia.

 

Los anillos que se van vendiendo automáticamente aparecen en la tienda con stock de 0 y los usuarios que entran a ver un producto vendido son advertidos que “Este producto ya no se encuentra en stock”, hasta aquí todo correcto.

 

EL problema es que de poco a poco la tienda se va llenando de productos vendidos, sin stock, salen en destacados, en listado de productos de las categorías, en el buscador, en productos más vistos, por todas partes como es habitual.

 

Lo anterior hace que los usuarios, muchos por coincidencia, hagan varios clicks en diferentes productos y la mayoría de los que han visitado son productos fuera de stock, vendidos, lo cual obviamente es negativo para la tienda, el usuario puede pensar que no hay productos para comprar :-)

 

2.- Por otro lado, las páginas de los anillos se van indexando en los buscadores, y si desactivo los productos desde el BO, me corregiría el punto anterior (no se mostrarían en el frontend) pero me generaría páginas 404 ya que si un usuario encuentra el producto a través de, por ejemplo, google, no encontraría la página del producto porque estaría desactivado (Hay 1 error - Producto no disponible).

 

¿Qué opinan? ¿Alguna idea por dónde buscar o sugerencia?

 

Muchas gracias de antemano.

Edited by Antoniosan (see edit history)
Link to comment
Share on other sites

Ok, quieres ocutarlos, pero no desactivarlas, facilmente puedes hacerlo con una condicional por ejemplo en el product-list.tpl de tu plantilla para el listado de productos, del tipo:

 

{if productos stock mayor que 0} imprimo productos {/if}

 

Gracias Rubalcaba, acabo de tu aplicar tu idea, y me funciona perfectamente.

Link to comment
Share on other sites

¡Muchas gracias Rubalcaba!

 

Feliz, podrías detallar cómo lo hiciste para los que no somos programadores :-), tal vez compartir código para poder ver dónde ponerlo exactamente.

 

Mientras tanto iré probando a ver cómo queda, saludos!!

Link to comment
Share on other sites

Ok, quieres ocutarlos, pero no desactivarlas, facilmente puedes hacerlo con una condicional por ejemplo en el product-list.tpl de tu plantilla para el listado de productos, del tipo:

 

{if productos stock mayor que 0} imprimo productos {/if}

Si tienes activada la preventa esto no debería mostrar el item o si ?

cuál será la variable del estado de la "disponibilidad"?

 

Tendría que ser conmo un anidado?

Podría ser así también?

 

{if (productos stock = 0 and avaliability = "PreVenta") || (productos stock > 0 )} imprimo productos {/if}

 

Mostraría los items en Preventa y los que tienen Stock dejando lso que son 0 aparte....

 

Alguien lo puede probar??

{if ($product.quantity = 0 && $product.allow_oosp) ||($product.quantity > 0)}

 

Lo puse en la Línea 26 y cerré en la 77 del Product-list.tpl V 1.5.4

 

Pero no me entra alguein me ayuda con las variables???

Edited by Xzelot (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

¡Muchas gracias Rubalcaba!

 

Feliz, podrías detallar cómo lo hiciste para los que no somos programadores :-), tal vez compartir código para poder ver dónde ponerlo exactamente.

 

Mientras tanto iré probando a ver cómo queda, saludos!!

 

Para el listado de productos,

 

Justo al empezar el:

 

{foreach from=$products item=product name=products}

 

{if $product.quantity > 0}

 

Y cierras luego el

 

{/if}

 

Dejandolo asi:

 

{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2013 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
{if isset($products)}
<!-- Products list -->
<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
{if $product.quantity > 0}
 <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
  <div class="left_block">
   {if isset($comparator_max_item) && $comparator_max_item}
 <p class="compare">
  <input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked="checked"{/if} />
  <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label>
 </p>
   {/if}
  </div>
  <div class="center_block">
   <a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
 <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />
 {if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}
   </a>
   <h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|escape:'htmlall':'UTF-8'|truncate:35:'...'}</a></h3>
   <p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}" >{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}</a></p>
  </div>
  <div class="right_block">
   {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 (!$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 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 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}{l s='Out of stock'}{/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 ($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)}" 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)}" 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}
   <a class="button lnk_view" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
  </div>
 </li>{/if}
{/foreach}
</ul>
<!-- /Products list -->
{/if}

 

Es una pequeña chapuzilla.. lo mejor seria tocar la consulta sql, pero bueno...

  • Like 2
Link to comment
Share on other sites

  • 2 weeks later...

Para el listado de productos,

 

Justo al empezar el:

 

{foreach from=$products item=product name=products}

 

{if $product.quantity > 0}

 

Y cierras luego el

 

{/if}

 

Dejandolo asi:

 

{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to [email protected] so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <[email protected]>
*  @copyright  2007-2013 PrestaShop SA
*  @license	http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
{if isset($products)}
<!-- Products list -->
<ul id="product_list" class="clear">
{foreach from=$products item=product name=products}
{if $product.quantity > 0}
 <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if} {if $smarty.foreach.products.index % 2}alternate_item{else}item{/if} clearfix">
  <div class="left_block">
{if isset($comparator_max_item) && $comparator_max_item}
 <p class="compare">
  <input type="checkbox" class="comparator" id="comparator_item_{$product.id_product}" value="comparator_item_{$product.id_product}" {if isset($compareProducts) && in_array($product.id_product, $compareProducts)}checked="checked"{/if} />
  <label for="comparator_item_{$product.id_product}">{l s='Select to compare'}</label>
 </p>
{/if}
  </div>
  <div class="center_block">
<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
 <img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home_default')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />
 {if isset($product.new) && $product.new == 1}<span class="new">{l s='New'}</span>{/if}
</a>
<h3><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.name|escape:'htmlall':'UTF-8'}">{$product.name|escape:'htmlall':'UTF-8'|truncate:35:'...'}</a></h3>
<p class="product_desc"><a href="{$product.link|escape:'htmlall':'UTF-8'}" title="{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}" >{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}</a></p>
  </div>
  <div class="right_block">
{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 (!$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 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 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}{l s='Out of stock'}{/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 ($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)}" 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)}" 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}
<a class="button lnk_view" href="{$product.link|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
  </div>
 </li>{/if}
{/foreach}
</ul>
<!-- /Products list -->
{/if}

 

Es una pequeña chapuzilla.. lo mejor seria tocar la consulta sql, pero bueno...

 

Muy buena tu "chapuzilla..." pero una pregunta? si se me perimite :D

 

Esta solucion resuelve el problema de indexacion en los buscadores? es decir si hago esto (que lo hice) no me aparencen los productos en la tienda - pero dichos productos en dejan de ser indexados por google por ejemplo.?

Link to comment
Share on other sites

Muchas gracias Rubalcaba,

 

Lo probaré y te diré algo :-)

 

Memp500,

 

Los productos que ya están indexados seguirán indexados, mientras los buscadores no detecten algún error, como por ejemplo una página 404 not found, seguirá indexada y más si las visitas procedentes de esos productos hacen clicks en otros u otras secciones de la tienda.

 

Si los productos que serán afectados con la "buena chapuzilla de Rubalcaba" se venden o desaparecen antes de ser indexados, ya no se indexarán ya que no existirá un enlace hacia ellos, es decir que cuando los bots vayan a tu tienda y no encuentran enlaces a esos productos no los pueden indexar.

 

Saludos.

 

Actualizo: Funciona bien la "chapuzilla", gracias Rubalcaba :-)

Edited by Antoniosan (see edit history)
Link to comment
Share on other sites

Pues yo no se que pondre... porque añadi

{if $product.quantity > 0}

 

Y cuando voy a la categoria donde se encontraba dicho producto no me deja acceder, se me queda la pantalla en blanco...

 

 

Solucionado... tenia que poner un {/if} abajo del todo XD

Edited by Krauser (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Muchas gracias por la solución, Rubalcaba.

 

Me funciona perfectamente salvo en el caso de las combinaciones, ya que si tengo un stock de 0 de alguna talla no se lista el producto.

También he visto que las páginas totales aparecen aunque no haya productos.

 

He visto una solución que se hizo para la versión 1.2 y voy a ver si puedo trastear un poco y hacer un híbrido chapucero.

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...