2011-10-27 2 views
1

Je travaille sur un observateur qui doit ajouter (a) une ou plusieurs clés de série à chaque article dans le panier une fois la commande passée. J'écoute l'événement sales_model_service_quote_submit_success en ce moment.Mettre à jour l'article Options du produit après l'ordre

J'ai été en mesure d'accéder à la commande, d'obtenir une liste des articles, de les parcourir et d'obtenir les options du produit. Mon code échoue soit lorsque j'essaie de mettre en placeProductOptions, soit que je sauvegarde - je ne sais pas lequel, peut-être c'est les deux.

Voici le code correspondant:

// Get access to order information 
$lastOrderId = Mage::getSingleton('checkout/session')->getLastOrderId(); 
$order = Mage::getModel('sales/order')->load($lastOrderId); 

// Get the items from the order 
$items = $order->getAllItems(); 

foreach ($items as $item) 
{ 
    // Pretend here is the call that fetches the serial keys for this item and stores them in $keyString 

    // If we actually received the keys in a string, store them with the item 
    if (!empty($keyString)) 
    { 
     $productOptions = array(); 
     if (count($item->getProductOptions())) 
     { 
      $productOptions = $item->getProductOptions(); 
     } 
     $productOptions['keys'] = $keyString; 

     $item->setProductOptions($productOptions); 
     $item->save(); 
    } 
} 

Toutes les idées que je l'ai oublié ou fait de mal? Merci beaucoup.

Répondre

1

pas un tel observateur, au moins je ne trouve pas de codebase, voici ce que vous pouvez utiliser

Mage::dispatchEvent('sales_model_service_quote_submit_before', array('order'=>$order, 'quote'=>$quote)); 
Mage::dispatchEvent('sales_model_service_quote_submit_after', array('order'=>$order, 'quote'=>$quote)); 

et dans votre méthode d'observation

/** 
* 
* @param Varien_Event_Observer $observer 
* 
*/ 
public function setShippingDefaults(Varien_Event_Observer $observer) { 
    $order = $observer->getEvent()->getOrder(); 
} 

l'idée est que si vous faites En avant-action, vous n'aurez pas besoin d'appeler save et si vous le faites en after-action, alors vous le faites et si vous le faites avant l'action, vous pourriez finir en boucle sans fin si vous ne faites pas attention.

+0

Anton, j'apprécie votre contribution. J'ai deux pensées à propos de cette approche. Tout d'abord, l'événement se passait très bien, donc ce n'est pas que l'observateur n'est pas utilisé, c'est une question d'événement. Deuxièmement, je dois confirmer que la commande a bien été exécutée avant que je puisse remettre les clés au client, donc effectuer une commande, la modifier et la réenregistrer sous une forme quelconque est fondamentalement inévitable. –

+0

Anton, bien que certains de vos propos n'aient pas de sens pour ma situation spécifique, la nouvelle ligne de code pour accéder à la variable de commande a fonctionné ($ order = $ observateur-> getEvent() -> getOrder();). Je ne suis pas sûr pourquoi la structure de la variable est différente ou a des droits d'accès différents, mais cette nouvelle façon d'accéder à la variable a fait l'affaire. Merci d'avoir pris le temps de me pencher sur mon problème! –

+0

@Anton, Comme vous l'avez mentionné, il n'y a pas d'observateur de ce type sales_model_service_quote_submit_success mais j'ai trouvé cet observateur dans app/code/core/Mage/CatalogInventory/etc/config.xml. Avez-vous des explications à ce sujet? – shashank

Questions connexes