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

Почему товары которых нет в наличии попадают в заказ?


Recommended Posts

Всем привет.

Имеется сайт на ocstore 2.3 и шаблон MoneyMaker2. 

В настройках самого сайта и в шаблоне отключена возможность добавления товара в корзину при количестве 0 на складе, но каким-то образом клиенты умудряются заказать эти товары. Пробовал воспроизвести эту проблему у себя, но безуспешно.

Не подскажите в какую сторону копать? Куки, сессии или что может быть ещё?

Заранее спасибо.

ЗЫ я ранее задавал этот вопрос, но тогда я не знал, что можно в настройках шаблона можно также установить такую опцию, но видимо дело в чем-то другом.

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


Если прям очень интересно, откуда ноги растут, и есть желание разобраться во всем самому, то открываете /system/library/cart/cart.php и смотрите хотя бы в тот же стандартный метод корзины getProducts(). Он возвращает массив товаров, содержащихся в корзине. С этим методом и полученным массивом товаров, как правило, работают все остальные модули, отвечающие за процесс оформления заказа.

Так вот. В этом массиве для каждого товара имеется булевый элемент stock, который равен true, когда товар есть в наличии. Ну и наоборот. При этом, нет явного запрета на добавление товара в корзину с нулевыми или отрицательными остатками, что как бы норм, бывают же предзаказы всякие.

Spoiler

$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
                );

 

И уже потом, в процессе оформления заказа, будет проводится проверка по этому полю stock и, в случае чего, выдаваться уведомление клиенту, что каких-то там товаров нет в наличии и завершить заказ низя. Ну какое-либо иное действие. Не суть.

 

Если Вы хотите например, что бы была проверка на кол-во еще при добавлении товара в корзину, и если этот функционал реализован в шаблоне, то прежде всего, стоит изучить, каким образом изменена у Вас эта логика (скорее всего ocmod'ами). Открываете /system/storage/modification/system/library/cart/cart.php и смотрите, что там происходит. Можно для наглядности и понимания выводить содержимое корзины куда-нибудь в лог и смотреть. например, вставив прям в файл /system/storage/modification/system/library/cart/cart

вот такую команду
 

Spoiler

 

находите строку

return $product_data;

и прямо перед ней пишите:

$this->log->write('My Cart Contains this prods: ' . print_r($product_data, true));

после этого, у Вас в журнале ошибок  /system/storage/logs/error.log будет записываться содержимое массива

 

 

1 hour ago, Kost9lbrik said:

Не подскажите в какую сторону копать? Куки, сессии или что может быть ещё? 

Еще может быть какой-нибудь кэширующий модуль. Который клиенту показывает еще доступный товар, в то для Вас, как админа, кэш не работает.

Еще может быть в карточке товара не установлен верные статусы товаров, когда нет в наличии

Еще может быть в том же манимейкера не настроены Преимущества товаров > Статус склада на вкладке товар.

 

Змінено користувачем 100napb
  • +1 1
Надіслати
Поділитися на інших сайтах

@100napb , спасибо за советы. А если дело в кэшируемом модуле, то поможет ли очистка системного кэша после каждого обновления товара о его отсутствии для выявления данной проблемы? То если чистить его каждый раз при удалении товара и следить будет ли проявляться данная проблема на стороне клиентов. 

Заранее спасибо. 

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


В 04.03.2019 в 10:48, Kost9lbrik сказал:

Не подскажите в какую сторону копать? Куки, сессии или что может быть ещё?

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

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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