[MODX] Обработка остатков заказа в miniShop2

Плагин на событие 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)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Наш сайт использует куки, нажмите «ОК» если вы не против
OK