Jump to content

Problema con modulo de mejores ventas (solucionado)


josueramos

Recommended Posts

Hola a todos

 

Llevo unas semanas iniciándome en el mundo de prestashop preparando una tienda online de libros. 

 

Todo iba bien hasta que he tenido un problema con el módulo cstopseller.

El módulo en cuestión estaba funcionando perfectamente, hasta que comenzó a aparecer como pueden ver en la imagen adjunta, con el mensaje "no product", en lugar de desplegar los libros en cuestión. Debería quedar así: http://demo.presthemes.com/#line

 

He reinstalado y reiniciado el módulo, he reinstalado el archivo bestsales.tpl, pero no se me ocurre nada más, quizá haya modificado otro archivo que ha trastocado el resto. También, no sé si tendrá que ver, el importador de temas no me funciona. Al intentar cargar me dice "configuración de archivo errónea". 

 

Muchas gracias por sus consejos

 

Editado: esta es la web

post-738152-0-42321900-1389348113_thumb.png

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

Supongo que el modulo:

cstopseller

iria con la plantilla que llevas, porque por defecto el modulo que lleva prestashop no se llama asi....

 

Prueba contactar con el desarrollador de la plantilla que en tu caso veo que es presthemes

 

Comprueba si te pasa lo mismo con el modulo que lleva Prestashop por defecto, si puedes y usas la 1.5.6.1, deja el fichero:

/classes/ProductSale.php

Asi:

<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 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/osl-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/osl-3.0.php  Open Software License (OSL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*/

class ProductSaleCore
{
        /*
        ** Fill the `product_sale` SQL table with data from `order_detail`
        ** @return bool True on success
        */
        public static function fillProductSales()
        {
                $sql = 'REPLACE INTO '._DB_PREFIX_.'product_sale
                                (`id_product`, `quantity`, `sale_nbr`, `date_upd`)
                                SELECT od.product_id, SUM(od.product_quantity), COUNT(od.product_id), NOW()
                                                        FROM '._DB_PREFIX_.'order_detail od GROUP BY od.product_id';
                return Db::getInstance()->execute($sql);
        }

        /*
        ** Get number of actives products sold
        ** @return int number of actives products listed in product_sales
        */
        public static function getNbSales()
        {
                $sql = 'SELECT COUNT(ps.`id_product`) AS nb
                                FROM `'._DB_PREFIX_.'product_sale` ps
                                LEFT JOIN `'._DB_PREFIX_.'product` p ON p.`id_product` = ps.`id_product`
                                '.Shop::addSqlAssociation('product', 'p', false).'
                                WHERE product_shop.`active` = 1';
                return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
        }

        /*
        ** Get required informations on best sales products
        **
        ** @param integer $id_lang Language id
        ** @param integer $page_number Start from (optional)
        ** @param integer $nb_products Number of products to return (optional)
        ** @return array from Product::getProductProperties
        */
        public static function getBestSales($id_lang, $page_number = 0, $nb_products = 10, $order_by = null, $order_way = null)
        {
                if ($page_number < 0) $page_number = 0;
                if ($nb_products < 1) $nb_products = 10;
                $final_order_by = $order_by;
                $order_table = '';                 
                if (is_null($order_by) || $order_by == 'position' || $order_by == 'price') $order_by = 'sales';
                if ($order_by == 'date_add' || $order_by == 'date_upd')
                        $order_table = 'product_shop';                                 
                if (is_null($order_way) || $order_by == 'sales') $order_way = 'DESC';
                $groups = FrontController::getCurrentCustomerGroups();
                $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
                $interval = Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20;

                //Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
                $sql = 'SELECT cp.`id_product`
                                FROM `'._DB_PREFIX_.'category_group` cg
                                INNER JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
                                WHERE cp.`id_product` IS NOT NULL AND cg.`id_group` '.$sql_groups;
                $products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
                $ids = array();
                foreach ($products as $product)
                        $ids[$product['id_product']] = 1;
                $ids = array_keys($ids);
                $ids = array_filter($ids);
                sort($ids);
                $ids = count($ids) > 0 ? implode(',', $ids) : 'NULL';
                
                //Main query
                $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity,
                                        pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
                                        pl.`meta_keywords`, pl.`meta_title`, pl.`name`,
                                        m.`name` AS manufacturer_name, p.`id_manufacturer` as id_manufacturer,
                                        MAX(image_shop.`id_image`) id_image, il.`legend`,
                                        ps.`quantity` AS sales, t.`rate`, pl.`meta_keywords`, pl.`meta_title`, pl.`meta_description`,
                                        DATEDIFF(p.`date_add`, DATE_SUB(NOW(),
                                        INTERVAL '.$interval.' DAY)) > 0 AS new
                                FROM `'._DB_PREFIX_.'product_sale` ps
                                LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
                                '.Shop::addSqlAssociation('product', 'p', false).'
                                LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
                                        ON p.`id_product` = pl.`id_product`
                                        AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
                                LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
                                Shop::addSqlAssociation('image', 'i', false, 'image_shop.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_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
                                LEFT JOIN `'._DB_PREFIX_.'tax_rule` tr ON (product_shop.`id_tax_rules_group` = tr.`id_tax_rules_group`)
                                        AND tr.`id_country` = '.(int)Context::getContext()->country->id.'
                                        AND tr.`id_state` = 0
                                LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = tr.`id_tax`)
                                '.Product::sqlStock('p').'
                                WHERE product_shop.`active` = 1
                                        AND p.`visibility` != \'none\'
                                        AND p.`id_product` IN ('.$ids.')
                                GROUP BY product_shop.id_product
                                ORDER BY '.(!empty($order_table) ? '`'.pSQL($order_table).'`.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).'
                                LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;

                $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);

                if ($final_order_by == 'price')
                        Tools::orderbyPrice($result, $order_way);
                if (!$result)
                        return false;
                return Product::getProductsProperties($id_lang, $result);
        }

        /*
        ** Get required informations on best sales products
        **
        ** @param integer $id_lang Language id
        ** @param integer $page_number Start from (optional)
        ** @param integer $nb_products Number of products to return (optional)
        ** @return array keys : id_product, link_rewrite, name, id_image, legend, sales, ean13, upc, link
        */
        public static function getBestSalesLight($id_lang, $page_number = 0, $nb_products = 10, Context $context = null)
        {
                if (!$context)
                        $context = Context::getContext();
                if ($page_number < 0) $page_number = 0;
                if ($nb_products < 1) $nb_products = 10;

                $groups = FrontController::getCurrentCustomerGroups();
                $sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');

                //Subquery: get product ids in a separate query to (greatly!) improve performances and RAM usage
                $sql = 'SELECT cp.`id_product`
                FROM `'._DB_PREFIX_.'category_group` cg
                INNER JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
                WHERE cp.`id_product` IS NOT NULL AND cg.`id_group` '.$sql_groups.' AND cp.`id_product` IS NOT NULL';
                $products = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
                $ids = array();
                foreach ($products as $product)
                        $ids[$product['id_product']] = 1;
                $ids = array_keys($ids);
                sort($ids);
                $ids = array_filter($ids);
                $ids = count($ids) > 0 ? implode(',', $ids) : 'NULL';

                //Main query
                $sql = 'SELECT p.id_product, pl.`link_rewrite`, pl.`name`, pl.`description_short`, MAX(image_shop.`id_image`) id_image, il.`legend`,
                                        ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category, p.show_price, p.available_for_order, p.quantity, p.customizable,
                                        IFNULL(pa.minimal_quantity, p.minimal_quantity) as minimal_quantity, p.out_of_stock
                                FROM `'._DB_PREFIX_.'product_sale` ps
                                LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
                                '.Shop::addSqlAssociation('product', 'p').'
                                LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (ps.`id_product` = pa.`id_product` AND pa.default_on = 1)
                                LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
                                        ON p.`id_product` = pl.`id_product`
                                        AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
                                LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
                                Shop::addSqlAssociation('image', 'i', false, 'image_shop.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_.'category_lang` cl
                                        ON cl.`id_category` = product_shop.`id_category_default`
                                        AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').'
                                WHERE product_shop.`active` = 1
                                        AND p.`visibility` != \'none\'
                                        AND p.`id_product` IN ('.$ids.')
                                GROUP BY product_shop.id_product
                                ORDER BY sales DESC
                                LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;

                if (!$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
                        return false;

                foreach ($result as &$row)
                {
                         $row['link'] = $context->link->getProductLink($row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
                         $row['id_image'] = Product::defineProductImage($row, $id_lang);
                        $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
                        $row['price_tax_exc'] = Product::getPriceStatic(
                                                (int)$row['id_product'],
                                                false,
                                                ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null),
                                                (Product::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6)
                                        );
                }
                return $result;
        }

        public static function addProductSale($product_id, $qty = 1)
        {
                return Db::getInstance()->execute('
                        INSERT INTO '._DB_PREFIX_.'product_sale
                        (`id_product`, `quantity`, `sale_nbr`, `date_upd`)
                        VALUES ('.(int)$product_id.', '.(int)$qty.', 1, NOW())
                        ON DUPLICATE KEY UPDATE `quantity` = `quantity` + '.(int)$qty.', `sale_nbr` = `sale_nbr` + 1, `date_upd` = NOW()');
        }

        public static function getNbrSales($id_product)
        {
                $result = Db::getInstance()->getRow('SELECT `sale_nbr` FROM '._DB_PREFIX_.'product_sale WHERE `id_product` = '.(int)$id_product);
                if (!$result || empty($result) || !key_exists('sale_nbr', $result))
                        return -1;
                return (int)$result['sale_nbr'];
        }

        public static function removeProductSale($id_product, $qty = 1)
        {
                $total_sales = ProductSale::getNbrSales($id_product);
                if ($total_sales > 1)
                        return Db::getInstance()->execute('
                                UPDATE '._DB_PREFIX_.'product_sale
                                SET `quantity` = `quantity` - '.(int)$qty.', `sale_nbr` = `sale_nbr` - 1, `date_upd` = NOW()
                                WHERE `id_product` = '.(int)$id_product
                        );
                elseif ($total_sales == 1)
                        return Db::getInstance()->delete('product_sale', 'id_product = '.(int)$id_product);
                return true;
        }
}
Link to comment
Share on other sites

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