TheMac Posted April 29, 2012 Share Posted April 29, 2012 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 More sharing options...
shacker Posted April 30, 2012 Share Posted April 30, 2012 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 More sharing options...
TheMac Posted May 6, 2012 Author Share Posted May 6, 2012 No me funciona, y he probado también los módulos añadiendo eso y tampoco Link to comment Share on other sites More sharing options...
shacker Posted May 6, 2012 Share Posted May 6, 2012 te aparece un error o algo? Link to comment Share on other sites More sharing options...
TheMac Posted May 6, 2012 Author Share Posted May 6, 2012 te aparece un error o algo? No, sigue todo igual Link to comment Share on other sites More sharing options...
TheMac Posted May 9, 2012 Author Share Posted May 9, 2012 No se dónde más mirar Link to comment Share on other sites More sharing options...
shacker Posted May 11, 2012 Share Posted May 11, 2012 adjunta el archivo aqui que lo miro Link to comment Share on other sites More sharing options...
TheMac Posted May 14, 2012 Author Share Posted May 14, 2012 Ya está adjunto (creo que es ese) blockhomeproductslide.php Link to comment Share on other sites More sharing options...
shacker Posted May 16, 2012 Share Posted May 16, 2012 donde dice esto WHERE p.`active` = 1 pon esto WHERE p.`active` = 1 AND p.`quantity` > 1 Link to comment Share on other sites More sharing options...
shacker Posted May 16, 2012 Share Posted May 16, 2012 = es un modulo personalizado, yo pense que era el que viene por defecto Link to comment Share on other sites More sharing options...
TheMac Posted May 16, 2012 Author Share Posted May 16, 2012 Sí, he probado eso y no me funciona, que lástima Link to comment Share on other sites More sharing options...
ChrlS Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
TheMac Posted May 17, 2012 Author Share Posted May 17, 2012 Vale, he adjuntado el TPL (comprimido) blockhomeproductslide.tpl.zip Link to comment Share on other sites More sharing options...
nadie Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
ChrlS Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
ChrlS Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
nadie Posted May 17, 2012 Share Posted May 17, 2012 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. Link to comment Share on other sites More sharing options...
ChrlS Posted May 17, 2012 Share Posted May 17, 2012 Si, mas que una equivocación fue una confusión. 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 More sharing options...
nadie Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
TheMac Posted May 17, 2012 Author Share Posted May 17, 2012 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 More sharing options...
ChrlS Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
shacker Posted May 17, 2012 Share Posted May 17, 2012 es posible que aparte tengas algunos mas vendidos que no tengan stock, entonces no los mostrara Link to comment Share on other sites More sharing options...
TheMac Posted May 17, 2012 Author Share Posted May 17, 2012 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 Gracias! Link to comment Share on other sites More sharing options...
nadie Posted May 17, 2012 Share Posted May 17, 2012 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 More sharing options...
ChrlS Posted May 17, 2012 Share Posted May 17, 2012 (edited) 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 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 May 17, 2012 by ChrlS (see edit history) Link to comment Share on other sites More sharing options...
TheMac Posted May 17, 2012 Author Share Posted May 17, 2012 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 More sharing options...
Recommended Posts