[РЕШЕНО] Простое наличие товара (остаток)

Добрый день!
Подскажите пожалуйста, может кто знает простое решение. Есть товар в единственном экземпляре и есть его наличие. Наличие сделано через плагин. Выводится вот так:
[[+availability:is=`1`:then=`<button class="uk-button uk-button-primary" type="submit"  name="ms2_action" value="cart/add"><i class="uk-icon-barcode"></i> [[%ms2_frontend_add_to_cart]]</button>`:else=`<button class="uk-button uk-button-primary uk-hidden" type="submit"  name="ms2_action" value="cart/add"><i class="uk-icon-barcode"></i> [[%ms2_frontend_add_to_cart]]</button>`]]

В админке выглядит вот так:

При смене наличия (в админке), кнопка заказа пропадает. Вопрос в том, как сделать чтобы при заказе наличие автоматически менялось на «нет в наличие» для заказанных позиций. Я думаю, что надо написать плагин на событие, но знаний не хватает :( Если есть похожие решения, помогите. Спасибо.
Алексей
19 декабря 2016, 08:12
modx.pro
3
3 859
0

Комментарии: 7

Дмитрий Суворов
19 декабря 2016, 22:01
1
+1
Тут в TV содержится инфа о наличии. 1 — да, 0 — нет.

<?php
if( $modx->event->name == 'msOnCreateOrder' )
{
    $idsProd = array();
    $order = $modx->getOption('msOrder', $scriptProperties);
    if (!is_object($order)) {
        return;
    }
    foreach ($order->getMany('Products') as $orderProduct) {
        $idsProd[] = $orderProduct->get('product_id');
    }
    
    foreach ($idsProd as $idRes) {
        $res = $modx->getObject('modResource', $idRes);
        $res->setTVValue('ostatok', 0);
        $res->save();
    }
}

После совершения заказа всем товарам, которые были заказаны — выставится в TV «ostatok» 0
    Алексей
    20 декабря 2016, 10:52
    0
    Дмитрий, спасибо огромное за сниппет!
    Но что-то не работает. Я создал TV ostatok, в него внес значение «наличие» 1 (числовое). Создал сниппет availability, но при оформлении заказа, количество не меняется. Я может не так вывожу? Подскажите пожалуйста. Спасибо.
      Алексей
      20 декабря 2016, 12:01
      0
      Все разобрался, это не сниппет, а плагин. Спасибо огромное, все работает!
        Дмитрий Суворов
        20 декабря 2016, 14:31
        +1
        да, именно) Не за что
          Алексей
          20 декабря 2016, 14:36
          0
          Дмитрий, извините и последний вопрос, а с свойством товара (не с TV параметром) подключенным через плагин можно такое же наличие реализовать или это надо править Minishop2? Спасибо.
            Дмитрий Суворов
            20 декабря 2016, 14:41
            +1
            Попробуйте изменить строчку
            $res->setTVValue('ostatok', 0);

            на эту:
            $res->set('availability', 0);

            или
            $res->set('availability', false);
              Алексей
              20 декабря 2016, 15:34
              0
              Да, вот это работает:
              $res->set('availability', 0);
              Огромное Вам спасибо!
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7