2010-05-07 6 views
6

J'utilise le cache de bloc Magento pour le bloc de navigation supérieur. Le problème est que le bloc doit générer des urls pour les fichiers du répertoire skin qui ne peuvent pas être placés dans des fichiers css car les noms de fichiers dépendent des données du modèle de catégorie. Maintenant, quand j'ouvre magento en utilisant une connexion sécurisée (https: //) le bloc de navigation est récupéré du cache et est envoyé au navigateur mais avec http: // urls entraînant un avertissement dans la plupart des navigateurs à propos de non sécurisé éléments sur la page.Comment utiliser des caches de blocs séparés pour un accès sécurisé et non sécurisé à Magento?

Je voudrais avoir des caches séparés pour les connexions sécurisées et non sécurisées. Le bloc de navigation étend la classe Mage_Catalog_Block_Navigation et a donc la configuration de cache suivante:

$this->addData(array(
     'cache_lifetime' => false, 
     'cache_tags'  => array(Mage_Catalog_Model_Category::CACHE_TAG, Mage_Core_Model_Store_Group::CACHE_TAG), 
    )); 

Répondre

4

Hmmm plus simple que ce que je pensais ...

J'ai essayé redéfinissant la méthode getCacheKey() en ajoutant un drapeau avec l'état de sécurité actuel, mais ce fut d'abord sans succès, mais après plusieurs purges de cache cela semble fonctionner maintenant:

public function getCacheKey() 
{ 
    $key = parent::getCacheKey(); 
    $key .= Mage::app()->getStore()->isCurrentlySecure() ? '_S' : '_U'; 

    return $key; 
} 
+0

Il y a un exemple dans le Mage_Page_Block_Html_Footer de base en v1.3.2.4 ainsi: '/ ** * Récupérer la clé pour bloquer le contenu de la mise en cache * * @return string */ fonction publique getCacheKey() { retour 'PAGE_FOOTER_'. Mage :: app() -> getStore() -> getId() . '_'. (int) Mage :: app() -> getStore() -> isCurrentlySecure() . '_'. Mage :: getDesign() -> getPackageName() . '_'. Mage :: getDesign() -> getTheme ('template'); } ' – benz001

Questions connexes