Плагин на событие msOnCreateOrder
вычитает кол-во заказанного товара.
Плагин на событие msOnSubmitOrder
проверяет - доступно ли требуемое кол-во товара.
Дальше уже зависит от фантазии. Можно либо проверять при выводе кол-во товара и в соответствии с этим выдавать сообщение на странице товара о том, что его теперь нет в наличии. Либо ввести еще одну переменую и хранить статус наличия товара в ней. В данном случае я записываю статус в две опции - exist
и exist_boolian
Больше информации можно найти тут: github.com/bezumkin/miniShop2/..../msorderhandler.class.php
switch ($modx->event->name) { case 'msOnCreateOrder': $prs = $msOrder->getMany('Products'); // так получаем объекты товаров в заказе foreach ($prs as $pr) { //повторяем для каждого товара в заказе $product_id = $pr->get('product_id'); //определяем id ресурса в заказе $product = $modx->getObject('msProduct', array('id' => $product_id)); $product_left = $product->get('weight') - $pr->get('count'); if($product_left < 1){ //$options = $product->loadData()->get('options'); $product->set('options', array( 'exist' => 'Нет в наличии' ,'exist_boolian' => 'Нет в наличии' ) ); } $product->set('weight', $product_left); $product->save(); $cacheKey = $product->getCacheKey(); $modx->cacheManager->refresh(array( 'resource' => array('key' => $cacheKey) )); } break; }
switch ($modx->event->name) { case 'msOnSubmitOrder': $cart = $order->ms2->cart->get(); foreach($cart as $v){ $product = $modx->getObject('msProduct', array('id' => $v['id'])); $product_left = $product->get('weight'); if( ($product_left - $v['count'] ) > 0){ // Все спокойно. }else{ $pagetitle = $product->get('pagetitle'); if($v['count'] > 1 && $product_left > 0){ $modx->event->output('Товара '.$pagetitle.' осталось '.$product_left.' шт.'); }else{ $modx->event->output('Товара '.$pagetitle.' уже нет в налчии'); } } // Посмотрим, какие данные передаются в $cart. (Будет записано в файл core/cache/logs/error.log) // $cart_info = print_r($v,true); // $modx->log(xPDO::LOG_LEVEL_ERROR, $cart_info); } break; }
Комментарии (0)
Не писать ответ