Страница 1 из 1

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

Добавлено: 17.05.2022, 16:19
dabustard
Как включить отображение товаров с нулевым остатком в блоке Рекомендуемые?
Заранее благодарю.

OkayCMS версии 4.30

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

Добавлено: 18.05.2022, 07:55
dabustard
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