Dans la continuité du développement d’un de nos sites e-commerce sous Magento, nous avons du répondre aux besoin suivants :
- rediriger l’utilisateur lorsqu’il clique sur un produit affiché en tant que nouveauté sur la page d’accueil vers la catégorie parente de ce produit.
- résoudre un bug de Magento qui change constamment l’ordre de la liste des produits simples contenus dans un produit groupé.
Redirection :
- Comme vous le savez peut-être déjà, la gestion de nouveaux produits sur la page d’accueil se fait par le template /app/design/frontend/votre_interface/votre_theme/template/catalog/product/new.phtml
- Ouvrez donc ce fichier et placez vous juste après la ligne suivante :
<?php $i=0; foreach ($_products->getItems() as $_product): ?> - Ce code représente la boucle sur les nouveaux produits, ajoutez donc le code suivant :
<?php
/**
* On récupère les catégories du produit sur lequel on est focalisé
*/
$_categories = $_product->getCategoryIds();
/**
* Parmi ces catégories, on récupère la première
*/
$_category = Mage::getModel('catalog/category')->load($_categories[0]);
/**
* Il nous faut ensuite trouver la catégorie parente
*/
$parentCategory = Mage::getModel('catalog/category')->load($_category->getParentId());
/**
* Ainsi que l'id
*/
$this_id = $_category->getId();
/**
* On crée ensuite l'url qui correspondra à URL_de_la_catégorie_parente.?cat=numéro_de_la_catégorie_du_produit
*/
$url = $parentCategory->getUrl()."?cat=".$this_id;
?> - Si vous souhaitez que la redirection soit effectuée lorsque vous cliquez sur le titre du produit par exemple, il vous suffit de trouver le div ayant pour classes padtop10 et padbotlistinghome et de remplacer l’url du produit par :
<a href="<?php echo $url ?>" - Vos produits en page d’accueil redirige désormais vos utilisateurs vers la catégorie parente du produit.
N.B. : Certains d’entre vous nous feront sûrement remarquer la possibilité d’utiliser simplement le code suivant :
$_category = Mage::getModel('catalog/category')->load($_categories[0]);
$url = $_category->getURL();
Seulement le problème est que, dans le cas de sous-sous-catégorie, cette URL nous fournit bien la liste des produits de la catégorie mais la page affichée ne contient pas le bloc « Filtrer par » qui permet la navigation entre les catégories, ce qui est assez embêtant et laisse un vide assez conséquent dans la page.
Résolution de bug :
Peut-être que vous avez déjà rencontrer le problème suivant : sous Magento, dans la page produit d’un produit groupé, les produits ne sont pas triés, c’est-à-dire que deux produits groupés totalement identiques (avec des sku et des noms différents) afficheront une liste de produits dans un ordre différent.
Un bug qui paraît anodin mais qui, peut parfois devenir déconcertant pour un client : imaginez une boutique de vente en ligne de CD sous la forme de produit groupé contenant un CD physique et un CD téléchargeable. Un utilisateur qui n’acheterait que des CD téléchargeables souhaiterait pouvoir savoir où se trouvent le produit téléchargeable dans la liste et toujours choisir le 1er ou le 2ème produit de la liste sans avoir à vérifier à chaque achat !
Pour résoudre ce bug, rien de plus simple :
- Copiez le fichier app/code/core/Mage/Catalog/Model/Product/Type/Grouped.php
- Créez l’arborescence suivante : app/code/local/Mage/Catalog/Model/Product/Type et copiez y votre fichier Grouped.php
- Ouvrez le et trouvez les lignes suivantes dans la fonction getAssociatedProducts vers la ligne 117 du fichier:
$collection = $this->getAssociatedProductCollection($product)
->addAttributeToSelect('*')
->addFilterByRequiredOptions()
->setPositionOrder()
->addStoreFilter($this->getStoreFilter($product))
->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product))); - Ces lignes représentent l’ensemble des produits associés à un produit groupé, afin de trier ces produits (par nom, par prix, etc…), il vous suffit de modifier ces lignes de la façon suivante (pour le tri par nom de produit dans notre cas ) :
$collection = $this->getAssociatedProductCollection($product)
->addAttributeToSort('name')
->addAttributeToSelect('*')
->addFilterByRequiredOptions()
->setPositionOrder()
->addStoreFilter($this->getStoreFilter($product))
->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product))); - Le tri sera désormais activé sur tous vos produits groupés.
C’est terminé pour aujourd’hui, j’espère qu’AppliBox vous aura aidé à améliorer l’ergonomie de votre site.





