Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


Kost9lbrik
 Поделиться

Рекомендованные сообщения

Всем привет.

Имеется сайт на 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 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.