Ajout de boutons « Précédent » et « Suivant » sur la fiche produit Magento
Une fonctionnalité très utile mais qui manque à la version Community de Magento est la possibilité d’ajouter des boutons de navigation « Précédent » et « Suivant » entre les produits d’une même catégorie.
Il existe évidemment des extensions qui permettent d’implémenter cette possibilité mais elles sont payantes, c’est pourquoi voici une méthode simple et surtout gratuite pour mettre en place ce système.
- En premier lieu, ouvrez le fichier ./app/design/frontend/votre_interface/votre_theme/template/catalog/product/view.phtml
- Ajoutez le code suivant juste après les commentaires Magento :
<?php
$_helper = $this->helper('catalog/output');
$_product = $this->getProduct();
/**
* Determine les liens précédents/suivants et le lien vers la categorie parente
*/
$_ccats = $this->helper('catalog/data')->getProduct()->getCategoryIds();
$_ccat = Mage::getModel('catalog/category')->load($_ccats[0]);
$ppos = $_ccat->getProductsPosition();
arsort($ppos);
$current_pid = $this->helper('catalog/data')->getProduct()->getId();
// Déclaration d'un tableau contenant les positions
$plist = array();
foreach ($ppos as $pid => $pos) {
$plist[] = $pid;
}
sort($plist);
$curpos = array_search($current_pid, $plist);
// Obtenir le lien du produit suivant
$previd = isset($plist[$curpos+1])? $plist[$curpos+1] : $current_pid;
$product = Mage::getModel('catalog/product')->load($previd);
$prevpos = $curpos;
while (!$product->isVisibleInSiteVisibility()) {
$prevpos += 1;
$nextid = isset($plist[$prevpos])? $plist[$prevpos] : $current_pid;
$product = Mage::getModel('catalog/product')->load($nextid);
}
$next_url = $product->getProductUrl();
// Obtenir le lien du produit précédent
$nextid = isset($plist[$curpos-1])? $plist[$curpos-1] : $current_pid;
$product = Mage::getModel('catalog/product')->load($nextid);
$nextpos = $curpos;
while (!$product->isVisibleInSiteVisibility()) {
$nextpos -= 1;
$nextid = isset($plist[$nextpos])? $plist[$nextpos] : $current_pid;
$product = Mage::getModel('catalog/product')->load($nextid);
}
$prev_url = $product->getProductUrl();
// Obtenir le lien de la catégorie
$more_url = $_ccat->getUrl();
?>
- Une fois ce code ajouté, trouvez les lignes suivants :
<div>
<input type="hidden" name="product" value="<?php echo $_product->getId() ?>" />
<input type="hidden" name="related_product" id="related-products-field" value="" />
</div>
Et ajoutez le code suivant en dessous de celles-ci :
<div>
<table cellspacing="0" border="0" width="100%">
<tr>
<td style="text-align:left;"> <a href="<?= $prev_url; ?>"><?php if ("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] <> $prev_url) echo $this->__('← Précedent') ?></a></td>
<td style="text-align:center;"> <a href="<?= $more_url; ?>"><?php echo $this->__('Catégorie') ?></a></td>
<td style="text-align:right;"> <a href="<?= $next_url; ?>"><?php if ("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] <> $next_url) echo $this->__('Suivant →') ?></a></td>
</tr>
</table>
</div> - Vous disposez désormais de trois liens vous permettant de naviguer à travers les produits d’une même catégorie.
Voici un petit exemple du résultat obtenu sur le site e-commerce Magento Médias Aviron (NB : le lien vers la catégorie parente a été désactivée sur ce site) :
- Si vous vous trouvez au premier (dernier) produit d’une catégorie, le lien « Précédent » (« Suivant ») n’apparaît pas :

- Sinon, les deux apparaissent :

En espérant que ce petit tutoriel vous servira pour améliorer votre site e-commerce Magento.
| Imprimer l'article | Cette entrée a été posté par raphael le 24 juin 2010 à 10:13, et placée dans développement web, e-commerce. Vous pouvez suivre les réponses à cette entrée via RSS 2.0. Vous pouvez aller directement à la fin et laisser une réponse. Le ping n'est pas autorisé pour le moment. |

about 6 months ago
Merci beaucoup, c’est très utile et ça fonctionne très bien !
about 7 months ago
Le tri des produits se fait par id et pas par catégorie.