Un petit tour sur le fonctionnement du modèle MVC t'aurais aidé à trouver la solution... Model View Controller...
Sa signifie que Magento utilise (entre guillemet) une url pour aller chercher un code. Par exemple :
www.site.com/index.php/wishlist/index/add/product/56/
Signifie que Magento va chercher la fonction add du controller indexController dans le module Wishlist avec le parametre produit = 56...
Faut donc aller dans app/code/core/Mage/Wishlist/Controllers/indexConroler.php et chercher public function addAction() (on met toujours action aux fonctions...)
indexAction correspond à une action par défaut :
www.site.com/index.php/wishlist/ par exmeple...
De là si on analyse le code on voit quoi ?
Il vérifie si l'user est connecté... sinon -> dégage !
Il vérifie si y a bien un id produit... sion->dégage !
Puis enfin :
| Code : |
$wishlist->addNewItem($product->getId());
Mage::dispatchEvent('wishlist_add_product', array('wishlist'=>$wishlist, 'product'=>$product));
if ($referer = $session->getBeforeWishlistUrl()) {
$session->setBeforeWishlistUrl(null);
}
else {
$referer = $this->_getRefererUrl();
}
$message = $this->__('%1$s was successfully added to your wishlist. Click <a href="%2$s">here</a> to continue shopping', $product->getName(), $referer);
$session->addSuccess($message);
|
Bon en même temps c'est pas du français ^^ mais c'est assez simple quand on a le core de magento dans la peau (desolé pour le jeu de mot ^^)
Y a donc un evenement dessus... Le dispatch qui va passer tout ca à un Model (model c'est tout ce qui traite les données... Controlleur qui contrôle les actions et View pour afficher le tout (frontend)... Bref...) - C'est du Magento pur et dur et quelle joie de coder ça (moi j'adore en tout cas...)
C'est donc :
| Code : |
Mage::dispatchEvent('wishlist_add_product', array('wishlist'=>$wishlist, 'product'=>$product));
|
qui ajoute dans la base l'objet à la wishlist... On va pas decortiquer le fonctionnement. Faut juste zapper d'aller à l'url (visuellement) pour effectuer l'opération et empecher une éventuelle redirection qui se produit aprés le dispatch...
Une première solution consite à modifier cette fonction de la classe. Voir comment overrider une fonction d'un controller (config.xml d'un nouveau module)
(voir ici :
www.magentocommerce.com/wiki/how_to_overload_a_controller)
Oui mais c'est pas tout... un peu d'ajax evidement... car si on tape par exemple :
www.site.com/index.php/wishlist/index/add/product/56/ (qui correspond au lien... ben on quitte la page)...
Faut donc trouver ce satané lien et l'ajaxé (y a prototype dans Magento qui a un ajax pas trop mauvais ;)) - Je te laisse le soin du code ajax ;)
Donc on a quitté le controller, direction le view... (la vue)
App/design/frontend/[package]/[theme]
génial magento pour ça. On sait où est tout !!!
Mais là on va pas direction wishlist... mais catalog/product/ vu que c'est ce moduel qui affiche ce fameux lien...
dans list et view notament
list.phtml ca donne :
| Code : |
<a href="<?php echo $this->helper('wishlist')->getAddUrl($_product) ?>" class="link-cart"><?php echo $this->__('Add to Wishlist') ?></a>
|
C'est ligne 74 de ce fichier dans le théme par défault de magento... Donc si on a fait le choix d'overrider la classe plus haut magento ira directement "taper" dans notre nouvelle classe qu'on aura adaptée à notre... Ajax...
Ajax qu'on placera pour traiter cet url au lieu de bêtement aller vers une autre page...
Bon je me suis pas relu, j'ai peut être commis une ou deux erreur, mais c'est ainsi que tu va t'y retrouver dans magento...