Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Какая переменная или функция отвечает за наличие товара на странице оформления


Recommended Posts

Привет народ, у меня тут такая проблема. Тащу количество товаров через api стороннего сайта и когда дело доходит до оформления товара то пишет Продукты отмеченные *** отсутствуют в нужном количестве или их нет в наличии! За количество отвечает у нас quantity, но я так и не понял где в карточке товара берётся это значение и сравнивается? В cart.php ничего такого нет.

Надіслати
Поділитися на інших сайтах


в библиотеке cart.php  метод getProcucts

if (!$product_query->row['quantity'] || ($product_query->row['quantity'] < $cart['quantity'])) {
     $stock = false;
 }
                                                                                 
// ......................
                                                                                 
                $product_data[] = array(
                    'cart_id' => $cart['cart_id'],
                    'product_id' => $product_query->row['product_id'],
                    'name' => $product_query->row['name'],
                    'model' => $product_query->row['model'],
                    'shipping' => $product_query->row['shipping'],
                    'image' => $product_query->row['image'],
                    'option' => $option_data,
                    'download' => $download_data,
                    'quantity' => $cart['quantity'],
                    'minimum' => $product_query->row['minimum'],
                    'subtract' => $product_query->row['subtract'],
                    'stock' => $stock,//  тута наличие
                    'price' => ($price + $option_price),
                    'total' => ($price + $option_price) * $cart['quantity'],
                    'reward' => $reward * $cart['quantity'],
                    'points' => ($product_query->row['points'] ? ($product_query->row['points'] + $option_points) * $cart['quantity'] : 0),
                    'tax_class_id' => $product_query->row['tax_class_id'],
                    'weight' => ($product_query->row['weight'] + $option_weight) * $cart['quantity'],
                    'weight_class_id' => $product_query->row['weight_class_id'],
                    'length' => $product_query->row['length'],
                    'width' => $product_query->row['width'],
                    'height' => $product_query->row['height'],
                    'length_class_id' => $product_query->row['length_class_id'],
                    'recurring' => $recurring
                );

метод проверяет есть ли в корзине товары которых нет на складе

 public function hasStock() {
        foreach ($this->getProducts() as $product) {
            if (!$product['stock']) {
                return false;
            }
        }

        return true;
    }

confirm.php

        // Validate cart has products and has stock.
        if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
            $redirect = $this->url->link('checkout/cart');
        }

контроллер корзины cart.php

if (!$this->cart->hasStock() && (!$this->config->get('config_stock_checkout') || $this->config->get('config_stock_warning'))) {
                $data['error_warning'] = $this->language->get('error_stock');
            } elseif (isset($this->session->data['error'])) {
                $data['error_warning'] = $this->session->data['error'];

 

  • +1 1
Надіслати
Поділитися на інших сайтах

Спасибо ребята, проблему решил. Решение проблемы как вы понимаете самописное и индивидуальное под api. fanatic  всё правильно описал, это актуально для opencart 3x.

Я убрал

// Validate cart has products and has stock.
        if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
            $redirect = $this->url->link('checkout/cart');
        }

так как в карточке товара у меня значение quantity выводится со стороннего сайта и в карточке товара я делаю проверку на наличие. Но там другая проблема вылезла ) товар то оформить можно, но количество учитываться не будет, в добавок у меня стоит модуль DEV-OPENCART.COM — Простое оформление заказа. Поэтому я сделал проверку и запретил указывать больше товара чем есть в наличии. Вот пример

            {% if (column == 'quantity') %} 
              <td class="text-left">
                <div class="input-group" style="max-width: 200px;">
                  <span class="input-group-btn">
                    <button class="btn btn-default" type="button" onclick="custom_cart.update({{ product.cart_id }}, {{ product.quantity - 1 }})" {% if product.quantity == 1 %} disabled {% endif %}><i class="fa fa-minus"></i></button>
                  </span>
                  <input type="text" disabled oninput="custom_cart.change({{ product.cart_id }}, event)" name="quantity[{{ product.cart_id }}]" value="{{ product.quantity }}" size="1" class="form-control" />
                  <span class="input-group-btn">
                    <button class="btn btn-default" type="button" onclick="custom_cart.update({{ product.cart_id }}, {{ product.quantity + 1 }})" {% if product.quantity >= product.wera %} disabled {% endif %}><i class="fa fa-plus"></i></button>
                  </span>
                </div>
              </td>
            {% endif %} 

Собственно это стандартный код этого модуля добавлено всего лишь сравнение в большую сторону.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.