Après pas mal de temps à m’être cassé la tête, voici un tuto qui peut s’avérer utile et qui ne surcharge pas le core Magento.
J’ai du créer une méthode de livraison custom – jusque là tout va bien – sauf que cette méthode de livraison nécessite d’avoir sélectionné un point relai pour qu’elle soit valide. Donc passer par une étape de validation durant mon checkout.
Après pas mal de recherches et d’aide du confrère Nicolas Verhoye, voici la méthode à adopter :
Dans votre config.xml, ajoutez l’observer suivant :
<?xml version="1.0"?> <config> <!-- ... --> <global> <!-- ... --> <events> <!-- ... --> <controller_action_postdispatch_checkout_onepage_saveShippingMethod> <observers> <monmodule_shipping_method_observer_address> <class>Mypackage_Mymodule_Model_Checkout_ShippingMethod_Observer</class> <method>myMethod</method> </monmodule_shipping_method_observer_address> </observers> </controller_action_postdispatch_checkout_onepage_saveShippingMethod> <!-- ... --> </events> <!-- ... --> </global> <!-- ... --> </config>
Dans la méthode de votre observer (/app/code/local/Mypackage/Mymodule/Model/Checkout/ShippingMethod/Observer.php) :
<?php class Mypackage_Mymodule_Model_Checkout_ShippingMethod_Observer { public function myMethod($observer) { /* votre logique */ if($error){ $message = Mage::helper('mymodule')->__('Your error message'); $result = array('error' => 1, 'message' => $message); $controllerAction = $observer->getEvent()->getControllerAction(); $controllerAction->getResponse()->setBody(Zend_Json::encode($result)); } return $this } }
Ce qui aura pour effet, en cas d’erreur, de ne pas accéder à l’étape suivante du checkout, et d’avoir un alert javascript avec votre message d’erreur.