in53ktin Posted January 26, 2012 Share Posted January 26, 2012 Hola, me gustaría saber como se podrían quitar los productos desplegados en la tienda que no hay en existencia, esto sin mandar un error 401 (No se encuentra); pero si alguien ya tiene esa referencia (url) y la teclea directo en el navegador le muestre el producto con cero unidades. En la imagen 1 es como se vería los productos que tengo en existencia solamente (activos). En la imagen 2 sería, si alguien tiene la url directa le mande esa página en lugar del famoso 401 (con stock cero). la url de la tienda es: www.sistemasytecnologia.com.mx/store Saludos. Link to comment Share on other sites More sharing options...
in53ktin Posted February 1, 2012 Author Share Posted February 1, 2012 Mmmm no se si nadie sabe hacer esto o nadie me quizo contestar jajajaja, bueno pues ahora mi pregunta es ¿en que archivo se realiza la consulta a la BD para llenar el archivo product-list.tpl?, creo que solamente es necesario agregarle una condición para que se pueda solucionar esto. Saludos. Link to comment Share on other sites More sharing options...
shacker Posted February 6, 2012 Share Posted February 6, 2012 es que la url esta en google o los buscadores, que son los que llevan a los usuarios a el producto que ya no existe. deberias redireccionar los errores 404 a la pagina index (aunque podria confundir a los usuarios) Link to comment Share on other sites More sharing options...
in53ktin Posted February 6, 2012 Author Share Posted February 6, 2012 Ya lo logré realizar quitando los productos que no tengan Stock pero me desacomoda todo el tema, únicamente le digo que no los muestre pero parece que me deja en blanco los espacios y cuando realiza la paginación la hace mal, dejando algunas páginas en blanco sin ningún producto. Mi idea es hacerlo desde que realiza la lista de productos agregarle una condición a la consulta, pero no logro encontrar el archivo que realiza esa consulta. Si saben más de este tema agradecería una ayuda. Saludos Link to comment Share on other sites More sharing options...
shacker Posted February 6, 2012 Share Posted February 6, 2012 claro, por que en realidad no estan desactrivados y los sigue contacto.supongo que lo que hiciste en el div que contiene el producto en el product-list.tpl, algo asi <div {if $product.stock > 1}style="display:none"{/if}> esto ocultaria el producto, pero en realidad lo que hay que hacer es limitarlo desde el archivo php o controlador php de productos Link to comment Share on other sites More sharing options...
Guest Posted February 7, 2012 Share Posted February 7, 2012 Para que omitas los productos que no estan en stock tendrias que modificar el Category.php que esta en classes, si mas no recuerdo ahi es donde hace las consultas para obtener los productos, con eso evitarias que aparecieran en categorias, pero si alguien entra directamente con la url al producto, el producto se mostrara, por lo que tambien tendrias que modificar Product.php, aunque en este caso creo que si es mucho mas facil una simple condicion en el product.tpl del tema y asi muestras lo que tu quieras en lugar del error 404, ya que veo quieres omitir ese mensaje. Link to comment Share on other sites More sharing options...
in53ktin Posted February 9, 2012 Author Share Posted February 9, 2012 Excelente después de buscar y buscar por fin me quedó!!! muchas gracias "sQs", yo sabía que era directo en las clases pero no encontraba el bendito Select. Cada día se aprende algo nuevo de este Prestashop. La solución: Modifiqué las líneas del Category.php if ($getTotal) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(cp.`id_product`) AS total FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product` WHERE cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').' '.($id_supplier ? 'AND p.id_supplier = '.(int)($id_supplier) : ' AND p.quantity > 0')); return isset($result) ? $result['total'] : 0; } Y las líneas $sql = ' SELECT p.*, pa.`id_product_attribute`, pl.`description`, pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, i.`id_image`, il.`legend`, m.`name` AS manufacturer_name, tl.`name` AS tax_name, t.`rate`, cl.`name` AS category_default, DATEDIFF(p.`date_add`, DATE_SUB(NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY)) > 0 AS new, (p.`price` * IF(t.`rate`,((100 + (t.`rate`))/100),1)) AS orderprice FROM `'._DB_PREFIX_.'category_product` cp LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = cp.`id_product` LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product` AND default_on = 1) LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.(int)($id_lang).') LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)($id_lang).') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)($id_lang).') LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (p.`id_tax_rules_group` = tr.`id_tax_rules_group` AND tr.`id_country` = '.(int)Country::getDefaultCountryId().' AND tr.`id_state` = 0) LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`) LEFT JOIN `'._DB_PREFIX_.'tax_lang` tl ON (t.`id_tax` = tl.`id_tax` AND tl.`id_lang` = '.(int)($id_lang).') LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer` WHERE cp.`id_category` = '.(int)($this->id).($active ? ' AND p.`active` = 1' : '').' '.($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : ' AND p.quantity > 0'); Para el Product.php fue: public function getStockAvailable() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `quantity`, `date_add` FROM `'._DB_PREFIX_.'product` WHERE `id_product` = '.(int)$this->id) .' AND quantity >0'; } Saludos!!!! Link to comment Share on other sites More sharing options...
Rolige Posted February 9, 2012 Share Posted February 9, 2012 Para el Product.php fue: public function getStockAvailable() { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue(' SELECT `quantity`, `date_add` FROM `'._DB_PREFIX_.'product` WHERE `id_product` = '.(int)$this->id) .' AND quantity >0'; } Saludos!!!! Que bueno que encontraste la solucion y mejor aun que la allas compartido aca, pero con esto supongo que te seguira mostrando el error 404 cuando no intentes entrar al producto con el enlace directamente, cosa que podria pasar cuando entres desde google o de otro buscador, ¿ya hiciste alguna modificacion para que te muestre otro error personalizado por ti? Link to comment Share on other sites More sharing options...
in53ktin Posted February 9, 2012 Author Share Posted February 9, 2012 Nop no he hecho el error personalizado. Realicé la prueba y si tienes la liga directa muestra el producto, así como también si lo buscas en la tienda te lo encuentra pero no disponible para comprar, por lo tanto no arroja el famoso 401. Saludos. Link to comment Share on other sites More sharing options...
Rolige Posted February 9, 2012 Share Posted February 9, 2012 Pues ya tendrias que modificar tambien el php de search y el php de product, best-sales, price-drop, etc.. etc... se vuelve dificil la tarea de tener que modificar tanto los archivos del core, por eso creo que te habia mencionado que seria mas rapido con modificar los tpl del tema con simples condiciones {if}, aunque si la cantidad de articulos son demasiados pues si es mas conveniente ahorrar recursos haciendolo asi como llevas el trabajo, espero puedas compartir el resto en caso que lo hicieras, asi ya no seria tan complicado cuando se presente la necesidad Me a tocado ver varias preguntas relacionadas a esto, pero algo que seria mucho mas sencillo es que automaticamente se desactivaran los productos cuando el stock sea <= 0, asi no tendrias que modificar tanto archivo puesto que PS ya esta listo para no cargar productos que estan desactivados, esta seria un buena alternativa solo que no me a tocado encontrar la solucion. Link to comment Share on other sites More sharing options...
Recommended Posts