Сломал голову с total_count

Хочу сделать плагин на событие msOnBeforeAddToCart
Чтобы товар не добавлялся в корзину, если его меньше, чем есть в наличии, чтобы ошибка вылезала
$modx->event->output('Превышен лимит');

Тем самым хочу найти, как вывести total_count, уже перепробовал всякие:
$cart->get('total_count');
$cart['total_count']
$cart->get('total_count');
$status['total_count']
$data['total_count']

Может я и не в ту сторону капаю, но всё же хотелось бы узнать:)
Евгений Кузнецов
15 ноября 2013, 19:42
modx.pro
1 792
0

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

Василий Наумкин
16 ноября 2013, 07:55
0
В любом месте сайта:
$ms2 = $modx->getService('miniShop2');
$ms2->initialize($modx->context->key);
$cart = $ms2->cart->get();

print_r($cart);die;
    Евгений Кузнецов
    16 ноября 2013, 18:32
    0
    Выдаёт: «Array ( )»
      Василий Наумкин
      16 ноября 2013, 18:50
      0
      Значит, корзина пуста.
        Евгений Кузнецов
        16 ноября 2013, 19:10
        0
        В итоге выдал Array ( [0d55292a2b58111390fc65496e2ba458] => Array ( [id] => 33 [price] => 1435 [weight] => 0 [count] => 7 [options] => ) )

        Мне нужно, чтобы только каунт дал, это тот самый тотал_каунт)
          Василий Наумкин
          16 ноября 2013, 19:12
          0
          И ты, конечно, не можешь сам его посчитать?
            Василий Наумкин
            16 ноября 2013, 19:15
            0
            Используй
            $ms2->cart->status();
              Евгений Кузнецов
              16 ноября 2013, 19:25
              0
              Да, спасибо, вот так — получилось!

              $ms2 = $modx->getService('miniShop2');
              $ms2->initialize($modx->context->key);
              $cart = $ms2->cart->status();
              print_r($cart['total_count']);
                Евгений Кузнецов
                16 ноября 2013, 22:17
                0
                Извини, а вот ещё возник вопрос, как получить само имя массива(array) — «0d55292a2b58111390fc65496e2ba458»?
                  Василий Наумкин
                  17 ноября 2013, 06:15
                  0
                  Это не имя, это ключ товара в корзине, с учетом дополнительных свойств.

                  Поясни конкретнее, что ты от него хочешь, и зачем? Для работы с массивами в php есть много разных функций.
                    Евгений Кузнецов
                    17 ноября 2013, 09:20
                    0
                    $cart = $ms2->cart->get();
                    $size= $cart['abd8bc953ddc5f1f0dd3f42fcddec25e']['options']['size'];

                    print_r(array_keys($cart));?
                      Василий Наумкин
                      17 ноября 2013, 09:59
                      0
                      Мы в шарады играем?

                      Разбирайся сам, если лень объяснять.
                        Евгений Кузнецов
                        17 ноября 2013, 10:42
                        0
                        Извини
                        А вот такой вопрос, как при событии msOnChangeInCart вытащить из продукта значение по полю size?
                        то есть я вижу, что при событии msOnBeforeAddToCart есть $product и я могу сделать $product->get('size'), а как то же самое сделать в msOnChangeInCart?
                          Василий Наумкин
                          17 ноября 2013, 10:44
                          0
                          Там прям передаётся $key.

                          Вот исходник.
                          Евгений Кузнецов
                          17 ноября 2013, 10:50
                          0
                          Да, $key я уже использую «во всю», но теперь хочу вытащить из первоначального продукта значение size. Т.е. можно ли как то по ключу вытащить из продукта значение доп. поля?
                          Василий Наумкин
                          17 ноября 2013, 10:52
                          0
                          Тогда:
                          $ms2 = $modx->getService('miniShop2');
                          $ms2->initialize($modx->context->key);
                          $cart = $ms2->cart->get();
                          
                          $id = $cart[$key]['id'];
                          if ($product = $modx->getObject('msProductData', $id)) {
                          	$size = $product->get('size');
                          }
                          Евгений Кузнецов
                          17 ноября 2013, 10:54
                          0
                          О! Спасибо большое!
                          Евгений Кузнецов
                          18 ноября 2013, 17:05
                          0
                          Продолжаю ломать голову:)
                          Делаю plugin на событие «msOnBeforeChangeInCart»:
                          $ms2 = $modx->getService('miniShop2');
                          $ms2->initialize($modx->context->key);
                          $cart = $ms2->cart->get();
                          
                          $productcount = $cart[$key]['count'];  // кол-во товаров этого ключа в корзине
                          $sizename = $options['size'];  // беру имя размера, на который делается заказ
                          $sizenum = $product->get($options['size']);  //беру количество товара из базы по имени размера
                          
                          /* Если в корзине больше товара, чем есть на скалде то вылезает error */
                          if ($productcount > $sizenum) {
                          	$modx->event->output('Превышен лимит по наличию');
                          }
                          Столкнулся с такой проблемой (проверял по event->output), что если запрашиваю $sizenum, т.е. лезу в $product, то перестаёт работать $key и соответственно не могу взять число купленного именно этого товара. С чем это может быть связано?
                          Евгений Кузнецов
                          19 ноября 2013, 23:59
                          0
                          Мне стоит ждать ответ?
                          Василий Наумкин
                          20 ноября 2013, 05:41
                          0
                          Нет, не стоит.
                          Евгений Кузнецов
                          20 ноября 2013, 10:08
                          0
                          т.е. это недоработка движка магазина? и либо ждать обновление, либо строить бронепоезд?
                          Василий Наумкин
                          20 ноября 2013, 10:24
                          0
                          Конечно, если у тебя вдруг перестает работать переменная — то это недоработка движка.

                          Возможно, даже недоработка самого php — как иначе?
                          Евгений Кузнецов
                          20 ноября 2013, 10:29
                          0
                          Ехидства полно и в Москве, далеко ходить не надо.
                          А $product и $key не у мои переменные, а Ваши
                          Василий Наумкин
                          20 ноября 2013, 10:34
                          0
                          У меня, не поверишь, всё работает.
                          Евгений Кузнецов
                          21 ноября 2013, 10:05
                          0
                          Я Вам скинул на почту bezumkin@ya.ru ещё раз описание проблемы и доступ к 24 часовому modx-test.com.
                          Подскажите, где я был не прав?
                          Василий Наумкин
                          21 ноября 2013, 11:07
                          0
                          Иди, проверяй.

                          При смене количества не передаётся товар, ибо он уже не имеет значения. В корзине может быть несколько одинаковых товаров, но с разынми свойствами, поэтому меняется количество позиции в корзине.

                          Товар нужно получить, по его id, а ты, пытался использовать несуществующую переменную $product, да еще и не проверял, получается ли товар на самом деле.
                          Евгений Кузнецов
                          21 ноября 2013, 11:16
                          0
                          Спасибо!
                          Евгений Кузнецов
                          21 ноября 2013, 11:55
                          0
                          Не подскажете, почему там может не работать $modx->resource->get('id'); в этом же коде.
                          Просто хочу, чтобы в корзине другая часть плагина работала. Добавляю $thispage = $modx->resource->get('id');, но ничего не выводит :(
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      27