Ограничить корзину одним товаром, добавлять только последний, остальные затирать.



  • Добрый день.
    Нужна возможность покупки только одной позиции за раз (по идее последнего товара в корзине), соответственно как ограничить количество товара в корзине одной позицией?
    Т.е. перед добавлением нужно просто затирать содержимое и все.
    Через JS можно вообще топорно в пару строк сделать, но как-то таймаут на очистку корзины не очень хорошо использовать.
    SHK.emptyCart();
    var that = this;
    setTimeout(function(){
    self.toCart(that);
    }, 1000);
    Думаю можно через колбэк по идее сделать, хотя все равно надо допиливать будет немного.

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



  • Сам себе ответил..
    Можно чутка модифицировать shopkeeper.class.php
    public function savePurchaseData( $purchaseArray = array() ){
    // clear cart
    $this->data = array();
    $this->delivery = array();
    // end clear cart

      //OnSHKAfterClearCart
    

    Работает. Главное при обновлении не забыть про это



  • Вот тебе плагин, назови его к примеру "The last item in the cart"
    вешай на него событие "OnSHKcalcTotalPrice"

    <?php
    $eventName = $modx->event->name;
    
    switch ($eventName) {
         /* Рассчет полной цены товаров в корзине. $_SESSION['shk_order'], $price_total. */
        case "OnSHKcalcTotalPrice":
            /*Получаем список товаров в корзине*/
            $shk_order = $_SESSION['shk_order'];
            /*Обновляем данные с последним товаром в корзине*/
            $_SESSION['shk_order'] = array(0=>end($shk_order));
       
            $modx->event->output($price_total);
            break;
    }
    


  • Спасибо! Не то событие значит смотрел.



  • если вдруг кому-то как мне надо еще количество одного товара ограничить - то можно добавить 1 строку

        $_SESSION['shk_order'] = array(0=>end($shk_order));
        //сюда!!!
        $_SESSION['shk_order'][0]['count'] = 1;
        $modx->event->output($price_total);
    

    мало ли кто гуглить будет



  • if (end($shk_order)['count'] != 0)
        {
            $_SESSION['shk_order'] = array(0=>end($shk_order));
            $_SESSION['shk_order'][0]['count'] = 1;
        }
    

    не плохо еще проверять вот это



Последние темы

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.