Скопируйте корзину в другую корзину, чтобы изменить id_cart


Скопируйте корзину в другую корзину, чтобы изменить id_cart

28.01.2019 08:01:28 Просмотров 55 Источник

Я хотел бы дать объекту cart новый идентификатор, у меня есть следующий код:

if ($payment->order_result->return->failures->failure == 'field.ordernumber.exists') {
    $dup = $this->context->cart->duplicate();
    $this->context->cart->delete();
    $this->context->cart = new Cart($dup['cart']->id);
}

Тележка не "заменена", я попробовал несколько вещей: используйте ключевое слово $GLOBALS of global, но ничто на самом деле не заменяет или не изменяет объект cart. Каков наилучший подход?

У вопроса есть решение - Посмотреть?

Ответы - Скопируйте корзину в другую корзину, чтобы изменить id_cart / Copy cart into another cart in order to change the id_cart

ethercreation

29.01.2019 11:09:46

Попробуйте вместе :

if ($payment->order_result->return->failures->failure == 'field.ordernumber.exists') {
    $context = Context::getContext();
    $cart_products = $context->cart->getProducts();
    $this->context->cart->delete();    
    $newCart = new Cart();

    if (!$context->cart->id) {
        $guest = new Guest();
        $context->cart->mobile_theme = $guest->mobile_theme;

        $context->cart->add();
        if ($context->cart->id)
            $context->cookie->id_cart = (int)$context->cart->id;
    }

    foreach ($cart_products as $product) {
        Db::getInstance()->insert('cart_product', array(
                    'id_product' =>             (int)$product->id,
                    'id_product_attribute' =>   (int)0,
                    'id_cart' =>                (int)$newCart->id,
                    'quantity' =>               (int)$product->quantity,
                    'date_add' =>               date('Y-m-d H:i:s')
                ));
    }    
}
Является ответом!
Matt

29.01.2019 12:46:00

Вдохновленный ответом @ethercreation, я изменил следующее, чтобы решить свою проблему:

От

$dup = $this->context->cart->duplicate();
$this->context->cart->delete();
$this->context->cart = new Cart($dup['cart']->id);

К

$dup = $this->context->cart->duplicate();
$this->context->cart->delete();
$this->context->cookie->id_cart = $dup['cart']->id;

Существенная часть - $this->context->cartне может быть изменена. Корзина должна быть скопирована, а затем текущая корзина в файле cookie должна быть изменена. Поэтому куки $this->context->cookie->id_cart должен быть изменен на id_cart вновь созданного корзину!

Помочь в развитии проекта:
Закрыть X