https

Https + cache Magento + Internet Explorer = Pas d'images

Magento propose nativement un système de cache avancé afin d'afficher le contenu des templates plus rapidement. La configuration par défaut de ce cache peut cependant poser problème dans certaines situations.

Récemment, nous avons eu le problème de certaines images qui ne s'affichait pas dans le menu du haut lorsque nous passions d'une page http à une page https et ce uniquement sur Internet Explorer. Les images dans ce menu restait en effet avec une url non sécurisé (http). Celà ne plait pas trop à Internet Explorer qui par défaut n'affiche pas le contenu non sécurisé sur une page sécurisé. On a en effet le message suivant lorsque certaines images ont une adresse http alors que la page est en https:

Internet Explorer Security Warning

Le block affichant le menu avec les catégories était mis en cache et son cache n'était pas regénéré si l'on passait d'une page http à une page https. Ce qui explique pourquoi les images restaient avec une adresse http sur un page https.

Pour corriger cela, il faut réécrire la méthode getCacheKey de la classe Mage_Catalog_Block_Navigation. Il faut en effet inclure dans la clé du cache un paramètre indiquant si l'url est en https ou en http. Le cache sera alors différent pour ces 2 types de pages. Ce paramètre est ajouté avec la méthode getSkinUrl

Le code par défaut de getCacheKey

public function getCacheKey()
{
    return 'CATALOG_NAVIGATION_' . Mage::app()->getStore()->getId()
        . '_' . Mage::getDesign()->getPackageName()
        . '_' . Mage::getDesign()->getTheme('template')
        . '_' . Mage::getSingleton('customer/session')->getCustomerGroupId()
        . '_' . md5($this->getTemplate() . $this->getCurrenCategoryKey());
}

est donc remplacé par le code suivant

public function getCacheKey()
{
    return 'CATALOG_NAVIGATION_' . Mage::app()->getStore()->getId()
        . '_' . Mage::getDesign()->getPackageName()
        . '_' . Mage::getDesign()->getTheme('template')
        . '_' . Mage::getSingleton('customer/session')->getCustomerGroupId()
        . '_' . md5($this->getTemplate() . $this->getCurrenCategoryKey())
        . '_' . md5($this->getSkinUrl()); /*** FIX IN THIS LINE ***/
}

Et voilà, vous pouvez désormais utiliser sereinement https sur Internet Explorer

Pour plus d'infos concernant la gestion des caches sous Magento vous pouvez consulter cet article.