Jump to content
Sign in to follow this  
Kost9lbrik

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

Recommended Posts

Всем привет.

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

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

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

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

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

Share this post


Link to post
Share on other sites

Если прям очень интересно, откуда ноги растут, и есть желание разобраться во всем самому, то открываете /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:

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

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

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

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

 

Edited by 100napb
  • +1 1

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
В 04.03.2019 в 10:48, Kost9lbrik сказал:

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.