Лидеры продаж для каждой категории

Тема в разделе "PrestaShop", создана пользователем l.korv1n, 10 ноя 2013.

Информация :
Хочешь в разделе без проблем общаться - прочти правила, чтобы потом с форумом на время не прощаться. Читать обязательно!
Внимание! Читайте внимательно правила!Предупреждения выдаются без всяких вопросов. Нарушил - получил. Будьте Внимательнее! Постинг нескольких постов подряд приравнивается к НАРУШЕНИЮ! Будьте вежливы и соблюдайте правила ;-)
Модераторы: ZiX
  1. l.korv1n

    l.korv1n Постоялец

    Регистр.:
    7 сен 2013
    Сообщения:
    141
    Симпатии:
    8
    Здравствуйте.

    Как сделать, чтобы модули "лидеры продаж" выводил товары только для соответствующей категории?

    Например в категории "телефоны" из высех лидеров выводились только телефоны.

    готов заплатить за решение
     
  2. vtx888

    vtx888 Создатель

    Регистр.:
    9 апр 2013
    Сообщения:
    36
    Симпатии:
    7
    добавить в запрос условие с айда текущей категории. смотрите функцию в модели.
     
  3. vtx888

    vtx888 Создатель

    Регистр.:
    9 апр 2013
    Сообщения:
    36
    Симпатии:
    7
    модуль blockbestsellers.php:
    if(isset($category)){
    $category_id = $category->id;
    }


    $bestsellers = ProductSale::getBestSalesLight((int)($params['cookie']->id_lang), 0, 5);
    меняем на
    if($category_id){
    $bestsellers = ProductSale::getBestSalesLight2((int)($params['cookie']->id_lang), 0, 5, (int)$category_id);
    }else{
    $bestsellers = ProductSale::getBestSalesLight((int)($params['cookie']->id_lang), 0, 5);
    }

    2 вхождения
    класс ProductSale.php:
    добавляем

    public static function getBestSalesLight2($id_lang, $pageNumber = 0, $nbProducts = 10, $category_id)
    {
    global $link;

    if ($pageNumber < 0) $pageNumber = 0;
    if ($nbProducts < 1) $nbProducts = 10;

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

    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
    SELECT p.id_product, pl.`link_rewrite`, pl.`name`, pl.`description_short`, i.`id_image`, il.`legend`, ps.`quantity` AS sales, p.`ean13`, p.`upc`, cl.`link_rewrite` AS category
    FROM `'._DB_PREFIX_.'product_sale` ps
    LEFT JOIN `'._DB_PREFIX_.'product` p ON ps.`id_product` = p.`id_product`
    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_.'category_lang` cl ON (cl.`id_category` = p.`id_category_default` AND cl.`id_lang` = '.(int)$id_lang.')
    WHERE p.`active` = 1
    AND p.`id_category_default`= '.$category_id.'
    AND p.`id_product` IN (
    SELECT cp.`id_product`
    FROM `'._DB_PREFIX_.'category_group` cg
    LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
    WHERE cg.`id_group` '.$sqlGroups.'
    )
    ORDER BY sales DESC
    LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts));

    if (!$result)
    return false;

    foreach ($result AS &$row)
    {
    $row['link'] = $link->getProductLink($row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']);
    $row['id_image'] = Product::defineProductImage($row, $id_lang);
    }
    return $result;
    }



    код не проверял. если что дебажте сами.