Corriger le bug de pagination de la page d’accueil sous Magento

Dans: Magento

26 août 2009

Quand on lie un bloc statique à une catégorie [voir article : Ajouter des blocs statiques dans Magento], et que l’on duplique le fichier list.phtml, il existe un bug tout à fait normal de pagination.

Prenons un exemple, sur votre page d’accueil :

  • Vous listez les produits d’une catégorie ‘Promotion Accueil’, et vous y placez plus de 9 produits, 12 par exemple.
  • Naviguez ensuite dans un catégorie du site, et changez le nombre de produitz à afficher. Passez le à 9.
  • Revenez sur la page d’accueil, il n’y a plus que 9 produits qui s’affichent. Et comme nous avons enlevé les Toolbars, il est impossible d’afficher la totalité de la catégorie.

Cela est dû à un problème de SESSION, vu que notre list_accueil.phtml est une copie de list.phtml. Quand nous changeons notre tri par 9, une variable commune à tout le site est changée.

Le tout est donc de changer cette variable de SESSION uniquement sur la page d’accueil.

En affichant nos variables de SESSION :

<?php print_r($_SESSION); ?>

On repère la variable : $_SESSION['catalog']['limit_page']

Les variables de SESSION étant à manipuler avant toute sortie, il convient de faire les modification avant la balise <html>.

1) Si notre page de template d’accueil est différente des autres (3columns_accueil.phtml)

  • En haut de app/design/frontend/{votre_interface}/{votre_theme}/template/page/3columns-accueil.phtml, rajoutez :
<?php
if (!isset ($_SESSION['catalog']['limit_page']))
$_SESSION['catalog']['limit_page'] = 9;
// On stocke l'ancienne valeur de session pour la restaurer à la fin de la page
$tmpSessionLimitPage = $_SESSION['catalog']['limit_page'];
$_SESSION['catalog']['limit_page'] = 'all';
?>
  • En bas de la même page, rajoutez :
<?php $_SESSION['catalog']['limit_page'] = $tmpSessionLimitPage; ?>

2) Si notre page de template d’accueil est commune à d’autre page du site

Si notre page d’accueil utilise 3columns.phtml (par exemple), il faut mettre une condition pour les passages évoqués en 1) pour déterminer si nous nous trouvons sur la page d’accueil.

Note : J’ai choisi ici 3columns.phtml. Vous l’utilisez uniquement si votre page d’accueil possède ce template là. Pas la peine de le faire pour chaque template. Votre page d’accueil une fois le design fixé, ne changera plus.

  1. En haut de app/design/frontend/{votre_interface}/{votre_theme}/template/page/3columns.phtml , rajoutez :
<?php
// Si on se trouve sur la page d'accueil
if ($this->helper('core/url')->getCurrentUrl() == Mage:: getBaseUrl (Mage_Core_Model_Store:: URL_TYPE_WEB))
{
if (!isset ($_SESSION['catalog']['limit_page']))
$_SESSION['catalog']['limit_page'] = 9;
// On stocke l'ancienne valeur de session pour la restaurer à la fin de la page
$tmpSessionLimitPage = $_SESSION['catalog']['limit_page'];
$_SESSION['catalog']['limit_page'] = 'all';
}
?>
  • En bas de la même page, rajoutez :
<?php
// Si on se trouve sur la page d'accueil
if ($this->helper('core/url')->getCurrentUrl() == Mage:: getBaseUrl (Mage_Core_Model_Store:: URL_TYPE_WEB))
{
$_SESSION['catalog']['limit_page'] = $tmpSessionLimitPage;
}
?>
// Si on se trouve sur la page d'accueil
if ($this->helper('core/url')->getCurrentUrl() == Mage:: getBaseUrl (Mage_Core_Model_Store:: URL_TYPE_WEB))
{

Formulaire pour Commenter

Si vous en avez besoin, entourez votre code :

PHP : [php]echo $variable[/php]
XML : [xml]<default></default>[/xml]

Je m'appelle Frédéric Martinez.

Je suis Freelance Magento et anciennement étudiant en Master MIAGE à Toulouse.

Ce site présente mon CV ainsi que mes réalisations professionnelles, personnelles et universitaires.

rss_32 twitter_32 Magento

  • alexandre: Merci, c'est exactement ce dont j'avais besoin ! [...]
  • Frédéric Martinez: De base, non ce n'est pas possible. Cependant, cela doit se jouer dans les configurations JS de cal [...]
  • Peter: le tuto est génial, il est tres utile pour les débutants comme moi. Mais j'ai une petite que [...]
  • Frédéric Martinez: @martin : Non cela ne marche pas avec un Magento 1.6.2.0 par exemple car la table sales_order n'exis [...]
  • martin: Bonjour, ce code marche -t-il toujours sur les nouvelles version de magento ? merci [...]