Magento: en Programmant la mise à jour panier via un événement

Je suis d'accrochage dans le sales_quote_save_after événement disaptcher. Tout d'abord comme un test, je vais essayer d'obtenir les articles dans le panier et de modifier leurs prix à 0. Après je ne que je vais bâtiment dans quelques autres trucs.

Je vais avoir des ennuis. Je peux changer le prix à l'unité pas de problème, mais quand je vais pour recalculer le panier totaux les prix sont de retour pour le prix d'origine.

public function sales_quote_save_before($observer) {

    if (Mage::registry('basket_observer_executed')) {
        return $this;
    }

    $quote = $observer->getEvent()->getQuote();

    foreach ($quote->getAllItems() as $item) {
        if($item->getId()) {    
            $item->setCustomPrice(0);
        }
    }

    Mage::register('basket_observer_executed', true);

    $quote->save();
    $quote->setTotalsCollectedFlag(false)->collectTotals();
}

Quelqu'un peut-il me diriger vers le maintien de la nouvelle prix, en faisant de nouveau calcul des totaux?

  • Êtes-vous le déclenchement de cette sur la quote_save_before ou quote_save_after? Votre question dit _after, mais votre fonction est nommée _before. Pourquoi êtes-vous sûr que cela ne fonctionne une fois? Allant de la mémoire, je crois que la sauvegarder l'événement est appelé plusieurs fois, de sorte qu'il peut être réinitialisée par un plus tard Magento code après votre poignée de pistes.
InformationsquelleAutor iamjonesy | 2013-01-16