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