Перейти к содержимому


Фотография
- - - - -

Как положить в корзину товар в статусе "под заказ"


Лучший Ответ DMTR3000S , 30 June 2017 - 09:33

alekskomarov, из коробки такой возможности нет, но на свой страх и риск (делайте бэкапы!) можете попробовать следующее:

Откройте файл balance.php, который находится вот здесь:

/media/zoo/applications/jbuniversal/cart-elements/price/balance/

и найдите в нём функцию inStock:

public function inStock($quantity)
    {
        if (!$this->_isUseStock()) {
            return true;
        }

        $quantity = $this->app->jbvars->number($quantity);
        $inStock  = $this->getValue();

        if ($inStock == self::COUNT_AVAILABLE_YES) {
            return true;

        } elseif (($inStock == self::COUNT_AVAILABLE_NO) || ($inStock == self::COUNT_REQUEST)) {
            return false;

        } elseif ($inStock >= $quantity) {
            return true;
        }

        return false;
    }

 

замените false на true в этом условии:

elseif (($inStock == self::COUNT_AVAILABLE_NO) || ($inStock == self::COUNT_REQUEST)) {
    return false;
}

Однако, стоит учитывать, что так у вас будут добавляться в корзину товары не только под заказ, но и с нулевым остатком, т.е. те, у которых указано "Нет в наличии". Чтобы разделить логику, внесите в функцию inStock, например, такие правки:

public function inStock($quantity)
    {
        if (!$this->_isUseStock()) {
            return true;
        }

        $quantity = $this->app->jbvars->number($quantity);
        $inStock  = $this->getValue();

        if ($inStock == self::COUNT_AVAILABLE_YES) {
            return true;

        } elseif ($inStock == self::COUNT_AVAILABLE_NO) {
            return false;

        } elseif ($inStock == self::COUNT_REQUEST) {
            return true;
        }

        } elseif ($inStock >= $quantity) {
            return true;
        }

        return false;
    }
Перейти к сообщению


Сообщений в теме: 3

#1 alekskomarov

alekskomarov

Отправлено 30 June 2017 - 07:25

Час добрый. В стандартной корзине при настройках отслеживания количества товаров существует всего 2 варианта:

1. не отслеживать кол-ва, тогда все товары, указанные с количеством, "бесконечный" и "под заказ" отображаются как "в наличии" и кидаются в корзину без проблем.

2. отслеживать кол-ва. тогда товары в статусе "под заказ" в корзину не попадают, а выскакивает сообщение, что товара нет на складе. т.е. ситуация абсурдная - товар "под заказ", но заказать его нельзя ввиду отсутствия на складе.

 

мне необходимо сделать так, чтобы статус товара "под заказ" отображался бы именно "под заказ", но был бы доступен для заказа с сайта через корзину.

Подскажите, где, что и как поправить?


  • 0
Ищите! И обрящете...

#2 DMTR3000S

DMTR3000S

Отправлено 30 June 2017 - 09:33   Лучший Ответ

alekskomarov, из коробки такой возможности нет, но на свой страх и риск (делайте бэкапы!) можете попробовать следующее:

Откройте файл balance.php, который находится вот здесь:

/media/zoo/applications/jbuniversal/cart-elements/price/balance/

и найдите в нём функцию inStock:

public function inStock($quantity)
    {
        if (!$this->_isUseStock()) {
            return true;
        }

        $quantity = $this->app->jbvars->number($quantity);
        $inStock  = $this->getValue();

        if ($inStock == self::COUNT_AVAILABLE_YES) {
            return true;

        } elseif (($inStock == self::COUNT_AVAILABLE_NO) || ($inStock == self::COUNT_REQUEST)) {
            return false;

        } elseif ($inStock >= $quantity) {
            return true;
        }

        return false;
    }

 

замените false на true в этом условии:

elseif (($inStock == self::COUNT_AVAILABLE_NO) || ($inStock == self::COUNT_REQUEST)) {
    return false;
}

Однако, стоит учитывать, что так у вас будут добавляться в корзину товары не только под заказ, но и с нулевым остатком, т.е. те, у которых указано "Нет в наличии". Чтобы разделить логику, внесите в функцию inStock, например, такие правки:

public function inStock($quantity)
    {
        if (!$this->_isUseStock()) {
            return true;
        }

        $quantity = $this->app->jbvars->number($quantity);
        $inStock  = $this->getValue();

        if ($inStock == self::COUNT_AVAILABLE_YES) {
            return true;

        } elseif ($inStock == self::COUNT_AVAILABLE_NO) {
            return false;

        } elseif ($inStock == self::COUNT_REQUEST) {
            return true;
        }

        } elseif ($inStock >= $quantity) {
            return true;
        }

        return false;
    }

  • 3

#3 alekskomarov

alekskomarov

Отправлено 30 June 2017 - 10:13

DMTR3000S, спасибо за подсказку!

сделал немножко иначе:

 public function inStock($quantity)
    {
        if (!$this->_isUseStock()) {
            return true;
        }

        $quantity = $this->app->jbvars->number($quantity);
        $inStock  = $this->getValue();

        if (($inStock == self::COUNT_AVAILABLE_YES) || ($inStock == self::COUNT_REQUEST))  {
            return true;

        } elseif ($inStock == self::COUNT_AVAILABLE_NO){
            return false;

        } elseif ($inStock >= $quantity) {
            return true;
        }

        return false;
    }

все работает как надо :)


  • 1
Ищите! И обрящете...

#4 DMTR3000S

DMTR3000S

Отправлено 30 June 2017 - 10:52

сделал немножко иначе:

ну, тут как угодно можно нарулить, я ж так, для примера )) 


  • 0




Click to return to top of page in style!