Warenkorb laden nach erneuter Anmeldung

  • Hallo,


    ich hatte das Problem, dass nach dem Abmelden der Warenkorb nur dann wieder geladen wurde, wenn man sich beim Zeitpunkt der Abmeldung im Warenkorb befand.


    Ich habe für mich ein Override auf ...helpers/cart.php geschrieben und die PHP Klasse erweitert.


    Jetzt ist meine Frage ob dieser Code vielleicht in zukünftige Releases aufgenommen werden kann? (oder ob das Verhalten beabsichtigt ist und warum?)


    Hier der Code (Virtuemart 3.0.9) für die Erweiterung:


    In der Funkion getCart ab Zeile 117 den Ausgangscode:


    if (!empty($cartSession)) {
    $sessionCart = (object)json_decode( $cartSession ,true);
    if(empty($sessionCart->cartProductsData)
    or ($sessionCart->_guest and $sessionCart->_guest!=JFactory::getUser()->guest)){
    self::$_cart->loadCart($sessionCart);
    }
    }


    Durch folgendes ersetzen:
    if (!empty($cartSession)) {
    $sessionCart = (object)json_decode( $cartSession ,true);
    if(empty($sessionCart->cartProductsData)
    or ($sessionCart->_guest and $sessionCart->_guest!=JFactory::getUser()->guest)){
    self::$_cart->loadCart($sessionCart);
    }
    } else {
    // Änderung Ladeverhalten, DB Stand für Cart laden unabhängig von der Session.
    // Session konnte nicht wiedergefunden werden. Loadvorgang mit User ID
    self::$_cart->loadCart($sessionCart);
    // Fortsetzung des normalen Ladevorgangs, nachdem die Session-Variable in loadCart gesetzt wurde.
    $session = JFactory::getSession($options);
    $cartSession = $session->get('vmcart', 0, 'vm');
    if (!empty($cartSession)) {
    $sessionCart = (object)json_decode( $cartSession ,true);
    if(empty($sessionCart->cartProductsData)
    or ($sessionCart->_guest and $sessionCart->_guest!=JFactory::getUser()->guest)){
    self::$_cart->loadCart($sessionCart);
    }
    }
    }


    ... und weiter unten im Code, in der Funktion loadCart dies einfügen:


    if(!$currentUser->guest and $existingSession){{
    ... CodeBlock ...
    } else {
    // Keine Session, alten, in der DB gespeicherten Stand laden, falls dieser vorhanden ist.
    $model = new VmModel();
    $carts = $model->getTable('carts');

    $carts->load($currentUser->id,0,' ORDER BY `modified_on` DESC');

    $cartData = $carts->loadFieldValues();
    unset($cartData['_inCheckOut']);
    unset($cartData['_dataValidated']);
    unset($cartData['_confirmDone']);
    unset($cartData['_fromCart']);
    $this->virtuemart_cart_id = $cartData['virtuemart_cart_id'];

    if($cartData and !empty($cartData['cartData'])){
    $session = JFactory::getSession();
    $session->set('vmcart', $cartData['cartData'], 'vm');
    }
    }


    Vielen Dank vorab für die Kommentierung dieses Vorschlags!
    Markus