[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. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

[MODx] Генератор настроек MIGX

[MODx, MIGx] Документация на русском по MIGX

[MODX] Импорт и экспорт в MiniShop2. Реализация 1

[JS] Маска для ввода телефона +7(___)___-__-__

[MODx] minishop2 tips

Как включить HTTPS (SSL) в MODX - Подробная инструкция

[MODx, miniShop2] Генерация YML для выгрузки в маркет

[MODx] Подсказки по API

[OpenCart] Вывести на главную все категории с картинками

[MODx] Сайт на обслуживании (выключить сайт)

[MODx, MIGX] Примеры использования

[PHP, JSON] Пример перевода с помощью Yandex Translate API

Универсальная форма обратной связи — feedBackForm

Расширение свойств товаров minishop2

[MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

[Opencart] Вернуть английский язык, если вы его удалили

[OpenCart] Вывести модуль напрямую через контроллер

[MODX, MIGX] Вывести getImageList только если он не пустой

[MODx, Quip] Более рабочий вариант.

[MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

[MODX] pThumb - ресайз изображений. Примеры использования.

Красивое адаптивное меню под pdoMenu

[MODX, MiniShop2] Примеры выборки where, optionFilters, innerJoin

[MODx] Вывод tv-параметров в формате [название TV] - [значение TV]

[MODX] Вывести список всех опций MiniShop2

Все записи

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