J'ai un problème qui semble être lié à la mise en cache des blocs statiques du CMS.
J'ai une page cms et au sein de cette page, je rend un certain nombre de blocs statiques cms. Une version simplifiée du contenu de la page CMS ressemble à ceci:
<div class="cms-block-1">{{block type="cms/block" block_id="banner_home"}}</div>
<div class="cms-block-2">{{block type="cms/block" block_id="promo_home_1_1"}}</div>
<div class="cms-block-3">{{block type="cms/block" block_id="promo_home_1_2"}}</div>
<div class="cms-block-4">{{block type="cms/block" block_id="promo_home_2_1"}}</div>
<div class="cms-block-5">{{block type="cms/block" block_id="promo_home_2_2"}}</div>
<div class="cms-block-6">{{block type="cms/block" block_id="promo_home_2_3"}}</div>
<div class="cms-block-7">{{block type="cms/block" block_id="promo_home_3_1"}}</div>
<div class="cms-block-8">{{block type="cms/block" block_id="promo_home_3_2"}}</div>
La page se charge comme prévu immédiatement après l'effacement du cache de bloc, cette page ressemblant à ceci:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_2_1 content</div>
<div class="cms-block-5">promo_home_2_2 content</div>
<div class="cms-block-6">promo_home_2_3 content</div>
<div class="cms-block-7">promo_home_3_1 content</div>
<div class="cms-block-8">promo_home_3_1 content</div>
Cependant, après le chargement initial de la page, chaque chargement de page suivant le contenu est incorrect. Cela ressemble à ceci:
<div class="cms-block-1">banner content</div>
<div class="cms-block-2">promo_home_1_1 content</div>
<div class="cms-block-3">promo_home_1_2 content</div>
<div class="cms-block-4">promo_home_1_1 content</div>
<div class="cms-block-5">promo_home_1_2 content</div>
<div class="cms-block-6">promo_home_2_1 content</div>
<div class="cms-block-7">promo_home_2_2 content</div>
<div class="cms-block-8">promo_home_2_3 content</div>
Dans le deuxième exemple, vous pouvez voir que les deux premières promos sont correctes, mais tout ce qui suit affiche le mauvais contenu pour le block_id. De plus, les blocs promo_home_1_1 et promo_home_1_2 sont tous deux rendus deux fois et promo_home_3_1 et promo_home_3_2 ne sont jamais rendus. C'est comme le mappage entre block_id et son contenu de bloc statique associé est en quelque sorte mélangé. Cela est lié à la mise en cache, comme si le cache de bloc n'est pas activé, je ne vois plus le problème.
En outre, il convient probablement de noter que cette page fonctionnait auparavant sur EE 1.13, mais après la mise à niveau vers EE 1.14.2, ce problème a commencé à se produire.
Je me rends compte qu'il est assez difficile de dire ce qui ne va pas sans savoir ce qui se passe dans le système, mais j'espère que quelqu'un pourrait me donner au moins un peu plus de direction ici car je manque d'idées.
Mise à jour:
J'ai aussi essayé ça avec des widgets, par exemple
<div class="cms-block-1">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="63"}}</div>
<div class="cms-block-2">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="64"}}</div>
<div class="cms-block-3">{{widget type="cms/widget_block" template="cms/widget/static_block/default.phtml" block_id="65"}}</div>
Dans ce cas, les 3 blocs ont renvoyé le même contenu même si les identifiants pointent vers des blocs différents dans la base de données. Lorsque le cache est effacé, le bloc renvoyé change parfois, mais les trois widgets auront toujours le même contenu.
la source
Réponses:
Ok donc j'ai trouvé la cause de ce problème et il semble que ce soit un problème dans le noyau de magento.
Il y a une nouvelle méthode _construct ajoutée à Mage_Cms_Block_Block dans magento 1.14.2 qui contient le code suivant.
Cela active effectivement la mise en cache des blocs cms. Aucune clé de cache n'est définie, elle revient donc à Mage_Core_Block_Abstract :: getCacheKeyInfo qui utilise le nom du bloc dans la mise en page. Dans ce cas, nous n'utilisons pas réellement un fichier xml de mise en page pour ajouter le bloc et aucun nom n'est défini. Magento semble essayer de gérer cela en définissant quelque chose comme ANONYMOUS_78 comme nom. Cependant, pour une raison quelconque, cela ne semble pas fonctionner à 100%, d'où les doublons que je voyais.
Ma solution a été de remplacer la classe Mage_Cms_Block_Block dans ma propre extension et d'ajouter une nouvelle méthode pour définir explicitement la clé de cache sur l'ID de bloc plutôt qu'une valeur assignée. La classe ressemble à ceci:
Cela semble avoir résolu le problème.
Mise à jour:
Il semble que ce même problème existe également dans CE 1.9.2
la source
Pour les clients Magento EE, veuillez demander le correctif SUPEE-5874 à l'équipe d'assistance Magento Enterprise.
Il mettra à jour deux fichiers
Je ne peux pas publier le correctif réel de Magento car c'est leur propriété.
la source
Il est heureux que Magento mette également en cache des blocs statiques. Étant donné que la version mise à niveau actuelle inclut ce problème étrange en raison du cache des blocs statiques, vous pouvez utiliser mon module gratuitement.
Cette extension est créée pour une meilleure mise en cache des blocs statiques. Il tient également compte du fait que le site est sécurisé ou non. De plus, l'extension n'a pas de réécriture de base, ce qui rend ce module encore meilleur.
Et voilà .
Pour une meilleure vue d'ensemble de l'extension, vous pouvez consulter ce fil .
la source
Nous avons fourni un correctif pour CE, qui résout ce problème. Étant donné que EE est basé en CE, cela pourrait également s'appliquer.
Vous pouvez télécharger ce chemin depuis mon résumé: https://gist.github.com/tux-rampage/77b286f7973336877f7b
Téléchargez le gist, décompressez-le et exécutez la commande suivante dans votre racine magento:
Testez-le sur un environnement intermédiaire avant de l'appliquer sur un système en direct!
la source