Jump to content

Quitar productos sin stock en productos más vendidos


TheMac

Recommended Posts

Hola, tengo una tema que tiene lo de los productos más vendidos en portada, el problema es que muestra también los productos sin stock y me toca deshabilitarlos para que no se muestren ahí, hay alguna otra manera?

Gracias

Link to comment
Share on other sites

abre el archivo en classes/Productsale.php

 

encuentra esta funcion

 

public static function getBestSalesLight($id_lang, $pageNumber = 0, $nbProducts = 10)

 

y en esta linea

 

WHERE p.`active` = 1

 

añade

 

WHERE p.`active` = 1 AND p.`quantity` > 1

 

 

Esto hara que solo muestre los productos que tienen stock mayor a 1

Link to comment
Share on other sites

Hola!

 

creo que el problema está en la linea 133, donde pone:

$bestsellers = ProductSale::getBestSales((int)($params['cookie']->id_lang), 0, 5);

 

ya que dices que son los productos más vendidos, Cierto? entonces para no tocar la clase de "ProductSale", te recomiendo que en el archivo .tpl filtres cuales tienen stock y cuales no, mediante un {if}.

 

Si tienes alguna duda de como hacedlo, lo ideal es que adjuntes el tpl correspondiente y te diremos donde y que poner.

 

saludos

Link to comment
Share on other sites

Ejemplo aplicable solo a los productos nuevos, simplemente debes seguir el ejemplo y hacerlo con los otros for.

 

<ul class="products-list">
{if $newProducts}
 {foreach from=$newProducts item=product name=products}
 {if $product.quantity > 1}
 <li class="ajax_block_product {if $smarty.foreach.products.first}first_item{elseif $smarty.foreach.products.last}last_item{/if}">
  <a href="{$product.link}" title="{$product.name|escape:html:'UTF-8'}" class="product_image"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.name|escape:html:'UTF-8'}" /></a>
  <p class="manu-name">
  {if $product.id_manufacturer}{Manufacturer::getNameById($product.id_manufacturer)}{/if}
  </p>
  <h3><a href="{$product.link}" title="{$product.name|truncate:32:'...'|escape:'htmlall':'UTF-8'}">{$product.name|truncate:32:'...'|escape:'htmlall':'UTF-8'}</a></h3>
  <div>
   {if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
   <div class="products_list_price"> <p class="price_container"><span class="price">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span></p>
   </div>
   {else}<div style="height:21px;"></div>
   {/if}
  </div>
 </li>{/if}
 {/foreach}
{/if}
</ul>

Link to comment
Share on other sites

Vale, he adjuntado el TPL (comprimido)

 

blockhomeproductslide.tpl.zip

perfecto!

 

lo he revisado y si no me equivoco, en la linea 18 es donde aparece un foreach para los bestsellers, es decir, es el bucle donde hace que se visualicen los más vendidos. Entonces debes cambiar el foreach completo (desde {foreach.... hasta {/foreach}), por:

{foreach from=$bestsellers 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}">
    <a href="{$product.link}" title="{$product.name|escape:html:'UTF-8'}" class="product_image"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.name|escape:html:'UTF-8'}" /></a>
    <p class="manu-name">
    {if $product.id_manufacturer}{Manufacturer::getNameById($product.id_manufacturer)}{/if}
    </p>
    <h3><a href="{$product.link}" title="{$product.name|truncate:32:'...'|escape:'htmlall':'UTF-8'}">{$product.name|truncate:32:'...'|escape:'htmlall':'UTF-8'}</a></h3>
    <div>
	 {if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
	  <div class="products_list_price"> <p class="price_container"><span class="price">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span></p>
	  </div>
	 {else}<span style="height:21px;"></span>

	 {/if}
    </div>
   </li>
  {/if}
 {/foreach}

 

Recuerda activar el smarty para que se regeneren la plantilla tpl y tome efecto estos cambios y una vez regenerada, volver a desactivar.

 

Notificanos por aqui si se resuelve con este codigo, el problema que tienes...

 

saludos

Link to comment
Share on other sites

Revisando lo que ha subido "nadie", me he dado cuenta que lo que te propongo yo sólo es para los productos más vendidos, si quisieras hacedlo con cada sección que incluye dicho módulo deberás hacer algo similar en cada foreach.

 

Por otro lado comentando el codigo añadido por "nadie", creo que te has equivocado a poner

{if $product.stock > 1}

ya que seria:

{if $product.quantity> 1}

 

Y si pensamos el tema del stock (quantity), esta solucion sólo es validad si tus productos no tienen combinaciones, ya que si tus productos tienen combinaciones el stock (quantity) del producto se almacena en otro lugar, siendo más correcto implementar o añadir una consulta haciendo la llamada a

Product::getQuantity($producto->id);

para obtener el stock real del producto.

 

Vemos primero si tiene combinaciones y según nos indiques pues ya vemos como seria..

 

saludos

Link to comment
Share on other sites

Por otro lado comentando el codigo añadido por "nadie", creo que te has equivocado a poner

{if $product.stock > 1}

 

ya que seria:

{if $product.quantity> 1}

 

Si, mas que una equivocación fue una confusión. :P

Link to comment
Share on other sites

Si, mas que una equivocación fue una confusión. :P

 

Suele pasar! Una cosa mas: saber que con la condición

{if $product.quantity> 1}

si queda una unidad (aun tiene stock), hará que no se muestre, la condición más correcta sería:

{if $product.quantity > 0}

, no crees? :)

 

Además, creo que "TheMac" lo queria para los más vendidos y tu lo has aplicado a los productos nuevos.. incluso creo que seguramente no quiera mostrar en ningun caso los productos sin stock (el módulo visualiza los productos "más populares", "productos nuevos" y "productos mas vendidos") , por lo que habria que incluir el if en cada foreach como comentaba arriba.

Link to comment
Share on other sites

Suele pasar! Una cosa mas: saber que con la condición

{if $product.quantity> 1}

si queda una unidad (aun tiene stock), hará que no se muestre, la condición más correcta sería:

{if $product.quantity > 0}

, no crees? :)

 

Si. Aunque muchas veces, no interesa a nivel comercial en una tienda.

Link to comment
Share on other sites

perfecto!

 

lo he revisado y si no me equivoco, en la linea 18 es donde aparece un foreach para los bestsellers, es decir, es el bucle donde hace que se visualicen los más vendidos. Entonces debes cambiar el foreach completo (desde {foreach.... hasta {/foreach}), por:

{foreach from=$bestsellers 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}">
	<a href="{$product.link}" title="{$product.name|escape:html:'UTF-8'}" class="product_image"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.name|escape:html:'UTF-8'}" /></a>
	<p class="manu-name">
	{if $product.id_manufacturer}{Manufacturer::getNameById($product.id_manufacturer)}{/if}
	</p>
	<h3><a href="{$product.link}" title="{$product.name|truncate:32:'...'|escape:'htmlall':'UTF-8'}">{$product.name|truncate:32:'...'|escape:'htmlall':'UTF-8'}</a></h3>
	<div>
	 {if $product.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
	  <div class="products_list_price"> <p class="price_container"><span class="price">{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}</span></p>
	  </div>
	 {else}<span style="height:21px;"></span>

	 {/if}
	</div>
   </li>
  {/if}
 {/foreach}

 

Recuerda activar el smarty para que se regeneren la plantilla tpl y tome efecto estos cambios y una vez regenerada, volver a desactivar.

 

Notificanos por aqui si se resuelve con este codigo, el problema que tienes...

 

saludos

 

Hola, gracias a los dos lo primero ;)

He probado esta solución y es buena pero no es buena, porque me quita los que no están en stock pero no me muestra ninguno más, es decir, de los 5 que tengo que la portada, sólo me mostraba 1.

Link to comment
Share on other sites

Hola, gracias a los dos lo primero ;)

He probado esta solución y es buena pero no es buena, porque me quita los que no están en stock pero no me muestra ninguno más, es decir, de los 5 que tengo que la portada, sólo me mostraba 1.

 

ese problema está en el archivo "homeproductslider.php", casi al final donde pone:

$bestsellers = ProductSale::getBestSales((int)($params['cookie']->id_lang), 0, 5);
 $mostpopular = $this->getProductByFeatures("most popular","yes",(int)($params['cookie']->id_lang), 0, 5);
 $newProducts = Product::getNewProducts((int)($params['cookie']->id_lang), 0, 5);

si te fijas todos terminan con 0, 5 cierto? esto quiere decir que hace la consulta de los 5 primeros productos, y coincide que 4 de ellos no tienen stock.

 

Aumenta este número 5, por ejemplo a 10 ó 15 (no es la solucion mas elegante pero te servira).

saludos

Link to comment
Share on other sites

Hola, gracias, sí, también me ha servido pero no se porqué se descuadraba el slider.

He hecho una cosa "más simple", he cogido y he puesto primero las Novedades y luego Los más vendidos y se acabó jeje :D

 

Gracias! ;)

Link to comment
Share on other sites

Hola, gracias, sí, también me ha servido pero no se porqué se descuadraba el slider.

;)

Bueno, pon el slider otra vez, y enseña web, quizás podamos ayudarte y resolver el problema del descuadre . D

Link to comment
Share on other sites

Hola, gracias, sí, también me ha servido pero no se porqué se descuadraba el slider.

He hecho una cosa "más simple", he cogido y he puesto primero las Novedades y luego Los más vendidos y se acabó jeje :D

 

Gracias! ;)

 

genial!

 

hombre, lo ideal es crear unas funciones auxiliares que hagan lo mismo que las que llama el módulo, pero con la opcion de que sólo devuelva los productos con stock... pero a efectos practicos puede valerte este apaño.

 

EDITADO: también tiene razon nadie, si lo vuelves a poner, se te puede ayudar.

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

Yo si queréis lo pongo, pero basicamente me salía el 5º artículo debajo, no se veía... lo voy a dejar como he dicho porque además en lode poner 15 en vez de 5 será un lío al final porque cuando hayan muchos productos sin stock o más viejos saldrán ahí uno tras otro...

Link to comment
Share on other sites

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