Prestashop - Фильтр сортировки по цене не учитывает цены со скидкой

У меня есть собственная тема Prestashop, работающая на Prestashop 1.6.1.9, и сортировка товаров (сначала сортировка по самой низкой цене) не учитывает конкретные цены (скидки). Вместо этого используется розничная цена с налогами.

Чтобы лучше объяснить, вот как в настоящее время работает фильтр:

Продукт 1 — 11 долл. США | Продукт 2 — 15 долл. США | Продукт 3 — 25 долл. США | Товар 4 – 16 долл. США (35 долл. США до скидки)

Товар 4 должен быть выше товара 3, но фильтр учитывает цену до скидки, а не окончательную цену со скидкой.

Как отсортировать по конечной цене?

Это SQL-запрос в Category.php:

$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) AS quantity'.(Combination::isFeatureActive() ? ', IFNULL(product_attribute_shop.id_product_attribute, 0) AS id_product_attribute,
                    product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity' : '').', 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`, image_shop.`id_image` id_image,
                    il.`legend` as legend, m.`name` AS manufacturer_name, cl.`name` AS category_default,
                    DATEDIFF(product_shop.`date_add`, DATE_SUB("'.date('Y-m-d').' 00:00:00",
                    INTERVAL '.(int)$nb_days_new_product.' DAY)) > 0 AS new, **product_shop.price AS orderprice**
                FROM `'._DB_PREFIX_.'category_product` cp
                LEFT JOIN `'._DB_PREFIX_.'product` p
                    ON p.`id_product` = cp.`id_product`
                '.Shop::addSqlAssociation('product', 'p').
                (Combination::isFeatureActive() ? ' LEFT JOIN `'._DB_PREFIX_.'product_attribute_shop` product_attribute_shop
                ON (p.`id_product` = product_attribute_shop.`id_product` AND product_attribute_shop.`default_on` = 1 AND product_attribute_shop.id_shop='.(int)$context->shop->id.')':'').'
                '.Product::sqlStock('p', 0).'
                LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
                    ON (product_shop.`id_category_default` = cl.`id_category`
                    AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
                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_shop` image_shop
                    ON (image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$context->shop->id.')
                LEFT JOIN `'._DB_PREFIX_.'image_lang` il
                    ON (image_shop.`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`
                WHERE product_shop.`id_shop` = '.(int)$context->shop->id.'
                    AND cp.`id_category` = '.(int)$this->id
                    .($active ? ' AND product_shop.`active` = 1' : '')
                    .($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')
                    .($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '');

        if ($random === true) {
            $sql .= ' ORDER BY RAND() LIMIT '.(int)$random_number_products;
        } else {
            $sql .= ' ORDER BY '.(!empty($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.bqSQL($order_by).'` '.pSQL($order_way).'
            LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;
        }

person user3220828    schedule 20.03.2017    source источник


Ответы (1)


Сортировка товаров на странице категорий осуществляется функцией getProducts() в классе Category.php.

В этой функции есть 2 параметра (например, $order_by, $order_way), которые управляют сортировкой товаров. В этой функции есть запрос на получение продуктов, а также выбран столбец (например, product_shop.price AS orderprice). Здесь вы можете изменить имя столбца, чтобы изменить логику порядка сортировки.

person Knowband Plugins    schedule 22.03.2017
comment
Я использую Prestashop Specific Price для получения скидок. Я обнаружил, что скидка хранится в таблице ps_specific_price в поле сокращения. В этом поле хранится только сумма скидки, поэтому я не могу сортировать по ней. Я прикрепил весь SQL-запрос в первом сообщении. - person user3220828; 22.03.2017