Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 147 комментариев

Василий Наумкин
Василий Наумкин
Самое просто: добавить новое поле в товар и там хранить остатки. Это лучше сделать плагином, но можно и ТВ.

Затем нужно проверять возможность добавления товара в корзину. Системным плагином по событию msOnBeforeAddToOrder это делать не получится, ибо я такого не предусмотрел =)

Зато можно расширить класс корзины, и немного изменить метод add(), чтобы он проверял остатки и возвращал success() или error().

В течении пары недель я планирую сделать такой простой учет остатков в стандартной версии MS2, без учета цветов, размеров и прочего, чисто ресурсами.
Василий Наумкин
Василий Наумкин
Виталий
Виталий
30 000 потянет при грамотном подходе. Хостинг — modxcloud.com вполне подойдет.

Есть различные решения для экспорта и импорта в общем репозитории MODX. Мы планируем в скором будущем сделать такой модуль специально для miniShop2.
Bond Nataly
Bond Nataly
Здравствуйте. У меня такая же ситуация, ошибок яваскрипт нету. Страница перезагружается, добавляя в адресной строке ?msorder=15, заказ отправляется, все как надо, только, похоже, не выдает tpl.msOrder.success и не очищается корзина. В какую строну глянуть? Спасибо.
Антон Соловьёв
Антон Соловьёв
А в таком случаи какое максимально-возможное количество товаров в магазине, называемом «минишоп»? В остальном же он вроде примерно похож на Шопкипер по возможностям? Извиняюсь, если обидел кого предположением, я не вкурсе просто.
Алексей
Алексей
Большое спасибо Василию за этот код:

$status = 5;    // статус оплаченного заказа
$time = 60;     // время кэширования выборки, в секундах

if (!$cache = $modx->cacheManager->get('shkorders')) {
    $modx->addPackage('shopkeeper', MODX_CORE_PATH.'components/shopkeeper/model/');
    $q = $modx->newQuery('SHKorder', array('status' => $status));
    $q->select('content,userid');
    
    $goods = $users = array();
    if ($q->prepare() && $q->stmt->execute()) {
        while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
            $tmp = unserialize($row['content']);
            foreach ($tmp as $v) {
                if (isset($goods[$v['id']])) {$goods[$v['id']] += $v['count'];}
                else {$goods[$v['id']] = $v['count'];}
                
                if (isset($users[$row['userid']])) {$users[$row['userid']] += $v['count'];}
                else {$users[$row['userid']] = $v['count'];}
            }
        }
        $cache = array('goods' => $goods, 'users' => $users);
        $modx->cacheManager->set('shkorders', $cache, $time);
    }
}
else {
    extract($cache);
}



if (!empty($product)) {
    return isset($goods[$product]) ? $goods[$product] : 0;
}
else if (!empty($user)) {
    return isset($users[$user]) ? $users[$user] : 0;
}
Пользоваться очень просто:
[[!getSHKStat?product=`id товара`]] //для вывода числа продаж этого товара
или
[[!getSHKStat?user=`id юзера`]] //для вывода числа покупок юзера
Респект и уважуха тебе мужик, даже деньги не хотел брать )))