Отображение товаров с нулевым остатком в рекомендуемых

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

dabustard
dabustard
Репутация: 4
Сообщения: 40
Зарегистрирован: 26.01.2018
С нами: 4 года 5 месяцев

Сообщение #1 dabustard » 17.05.2022, 16:19

Как включить отображение товаров с нулевым остатком в блоке Рекомендуемые?
Заранее благодарю.

OkayCMS версии 4.30

korshunov
korshunov
Репутация: 114
Сообщения: 1619
Зарегистрирован: 03.12.2015
С нами: 6 лет 7 месяцев
Skype

Сообщение #2 korshunov » 18.05.2022, 05:31

Есть настройка для отображения отсутствующих товаров, которая действует на разные списки товаров (страница категории, страница брендов, список просмотренных и др).
Если Вам надо в рекомендуемых отображать с нулевым остатком, а в прочих списках - иначе, то стандартно такое не предусмотрено и надо программировать...

dabustard
dabustard
Репутация: 4
Сообщения: 40
Зарегистрирован: 26.01.2018
С нами: 4 года 5 месяцев

Сообщение #3 dabustard » 18.05.2022, 07:55

korshunov писал(а):Есть настройка для отображения отсутствующих товаров, которая действует на разные списки товаров
про какую настройку Вы говорите? В настройках каталога в админке для отсутствующих товаров включены опции Отображать по-умолчанию и Предзаказ включен, однако в рекомендуемых они не отображаются. Есть еще где-то?

korshunov писал(а):рекомендуемых отображать с нулевым остатком, а в прочих списках - иначе, то стандартно такое не предусмотрено и надо программировать...
был бы очень признателен, если подскажите какой файл "ковырять"

нашел такой код в RelatedProductsHelper.php:

Код: Выделить всё

            $relatedFilter = [
                'id' => $relatedIds,
                'limit' => count($relatedIds),
                'in_stock' => true,
                'visible' => 1,
            ];

Если меняю 'in_stock' => true, на 'in_stock' >= 0, вообше все рекомендуемые пропадают, что я делаю не так? Если вообще убрать 'in_stock' => true, то отображаются все отсутствующие. Но у меня есть товары с отрицательным количеством, их отображать не нужно, поэтому этот вариант не подходит..

Upd: разобррался

В файле ProductsEntity.php есть такой код:

Код: Выделить всё

    protected function filter__in_stock()
    {
        $this->select->where("(SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = 1");
    }

Если нужно отображать отсутствующие товары в рекомендуемых, делаем аналог этой функции и размещаем ниже:

Код: Выделить всё

    protected function filter__on_offer()
    {
        $this->select->where("(SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND (pv.stock IS NULL OR pv.stock>-1) LIMIT 1) = 1");
    }

а в RelatedProductsHelper.php в блоке

Код: Выделить всё

            $relatedFilter = [
                'id' => $relatedIds,
                'limit' => count($relatedIds),
                'in_stock' => true,
                'visible' => 1,
            ];

меняем 'in_stock' => true на 'on_offer' => true


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 4 гостя