Интернет магазин - Фильтр по наличию скидки.

#
Интернет магазин - Фильтр по наличию скидки.
Доброго времени суток.
Подскажите, пожалуйста, как реализовать вывод в каталоге товаров со скидками?

Версия системы - 6.1.4 Бизнес.

Аналогичный топик для 5-ки: http://www.hostcms.ru/forums/17/2254/
Применение описанного решения приводит к ошибке:

Exception: The method 'GetAllDiscounts' does not exist in the model 'shop'
35 modules/core/exception.php
1325 modules/core/orm.php
646 modules/core/entity.php
6 hostcmsfiles/lib/lib_6/lib_config_6.php
6 hostcmsfiles/lib/lib_6/lib_config_6.php
331 modules/core/command/controller/default.php
190 modules/core/router/route.php
217 index.php


Заранее спасибо всем откликнувшимся
#
Re: Интернет магазин - Фильтр по наличию скидки.
SQL-запрос для отбора активных товаров с активной скидкой из магазина с ID=14:


SELECT si.*
FROM shop_items si
WHERE
  si.shop_id=4 AND
  EXISTS (
    SELECT 1
    FROM shop_item_discounts sid
      JOIN shop_discounts sd ON sid.shop_discount_id = sd.id AND sd.active=1
    WHERE sid.shop_item_id = si.id
  ) AND
  si.active = 1


Подскажите, пожалуйста, как интегрировать данный запрос в типовую страницу "Интернет-Магазин", чтобы отобрать товары со скидкой из экземпляра класса Shop_Controller_Show?
#
Re: Интернет магазин - Фильтр по наличию скидки.
Реализовал рабочий (в первом приближении ) вариант.

1. Открываем "Типовую динамическую страницу" Интернет-магазин.
2. Открываем вкладку Код страницы.
3. После строки (у меня это 62 строка)

$Shop_Controller_Show->addCacheSignature('sorting=' . $sorting);


вставляем код:


// фильтр по наличию скидки
        if(intval(Core_Array::getGet('filter')) && intval(Core_Array::getGet('is_sale'))) {
            $current_date = date('Y-m-d H:i:s');
            $Shop_Controller_Show->shopItems()
                ->queryBuilder()
                ->join('shop_item_discounts', 'shop_items.id', '=', 'shop_item_discounts.shop_item_id')
                ->join('shop_discounts', 'shop_item_discounts.shop_discount_id', '=', 'shop_discounts.id', array(
                    array('AND (' => array('shop_discounts.end_datetime', '>=', $current_date)),
                    array('OR' => array('shop_discounts.end_datetime', '=', '0000-00-00 00:00:00')),
                    array('AND' => array('shop_discounts.start_datetime', '<=', $current_date)),
                    array(')' => NULL)
                ));
        }


Для вывода товаров со скидкой в url пишем: <домен_магазина>/<каталог_магазина>/?filter=1&is_sale=1
#
Re: Интернет магазин - Фильтр по наличию скидки.
Может кто делал фильтр по скидкам в быстром фильтре, чтобы скидка по ссылке выводилась?   <домен_магазина>/<каталог_магазина>/is_sale
#
Re: Интернет магазин - Фильтр по наличию скидки.
lyubaaa,
доступно в нашем модуле https://www.hostcms.ru/shop/market/modules/store/asmp_filter/
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Интернет магазин - Фильтр по наличию скидки.
alexpimnev писал(а):
доступно в нашем модуле https://www.hostcms.ru/shop/market/modules/store/asmp_filter/

Что -то у вас я не нашла, чтобы было не через get передачу (?filter=1&on_page=9&in_discount=1) , а было например /shop/in_discount/
Авторизация