Проблема с кэшем верхнего меню


Я добавил миниатюры категорий для подкатегорий в верхней навигации.
На небезопасных страницах изображения извлекаются из небезопасного пути, который является правильным, но когда я перехожу на страницу https, изображения по-прежнему извлекаются со страницы http, что неверно.
Чтобы устранить проблему, я изменил метод getCacheKeyInfo в классе Mage_Page_Block_Html_Topmenu из

 $shortCacheId = array(
             'TOPMENU',
             Mage::app()->getStore()->getId(),
             Mage::getDesign()->getPackageName(),
             Mage::getDesign()->getTheme('template'),
             Mage::getSingleton('customer/session')->getCustomerGroupId(),
             'template' => $this->getTemplate(),
             'name' => $this->getNameInLayout(),
             $this->getCurrentEntityKey()
         );
         $cacheId = $shortCacheId;

         $shortCacheId = array_values($shortCacheId);
         $shortCacheId = implode('|', $shortCacheId);
         $shortCacheId = md5($shortCacheId);
         $cacheId['entity_key'] = $this->getCurrentEntityKey();
         $cacheId['short_cache_id'] = $shortCacheId;

         return $cacheId;

До

$shortCacheId = array(
            'TOPMENU',
            Mage::app()->getStore()->getId(),
            (int)Mage::app()->getStore()->isCurrentlySecure(),
            Mage::getDesign()->getPackageName(),
            Mage::getDesign()->getTheme('template'),
            Mage::getSingleton('customer/session')->getCustomerGroupId(),
            'template' => $this->getTemplate(),
            'name' => $this->getNameInLayout(),
            $this->getCurrentEntityKey()
        );
        $cacheId = $shortCacheId;
        $shortCacheId = array_values($shortCacheId);
        $shortCacheId = implode('|', $shortCacheId);
        $shortCacheId = md5($shortCacheId);

        $cacheId['entity_key'] = $this->getCurrentEntityKey();
        $cacheId['short_cache_id'] = $shortCacheId;

        return $cacheId;

Но проблема сохраняется, и все еще изображения в верхней навигации вытягиваются с URL-адреса http на странице https.

Пожалуйста, дайте мне знать, как можно устранить эту проблему.
Любая помощь будет оценена по достоинству.
КОД ДЛЯ ДОБАВЛЕНИЯ ИЗОБРАЖЕНИЙ
Я переписал класс Mage_Catalog_Model_Observer ниже методов

public function addCategoryImages(Varien_Event_Observer $observer) {
    $block = $observer->getEvent()->getBlock();
    $block->addCacheTag(Mage_Catalog_Model_Category::CACHE_TAG);
    $this->_addCategoriesToMenu(
        Mage::helper('catalog/category')->getStoreCategories(), $observer->getMenu(), $block, true
    );
}

public function _addCategoriesToMenu($categories, $parentCategoryNode, $menuBlock, $addTags = false) {
    $categoryModel = Mage::getModel('catalog/category');
    foreach ($categories as $category) {
        if (!$category->getIsActive()) {
            continue;
        }

        $nodeId = 'category-node-' . $category->getId();

        $categoryModel->setId($category->getId());
        if ($addTags) {
            $menuBlock->addModelTags($categoryModel);
        }

        $tree = $parentCategoryNode->getTree();
        $categoryData = array(
            'name' => $category->getName(),
            'id' => $nodeId,
            'url' => Mage::helper('catalog/category')->getCategoryUrl($category),
            'is_active' => $this->_isActiveMenuCategory($category),
            'thumbnail' => $categoryModel->load($category->getId())->getThumbnail()
        );
        $categoryNode = new Varien_Data_Tree_Node($categoryData, 'id', $tree, $parentCategoryNode);
        $parentCategoryNode->addChild($categoryNode);

        $flatHelper = Mage::helper('catalog/category_flat');
        if ($flatHelper->isEnabled() && $flatHelper->isBuilt(true)) {
            $subcategories = (array) $category->getChildrenNodes();
        } else {
            $subcategories = $category->getChildren();
        }

        $this->_addCategoriesToMenu($subcategories, $categoryNode, $menuBlock, $addTags);
    }
}

Я добавил "миниатюру" в массив данных категорий, а затем извлек это в шаблоне app/design/frontend/rwd/bluebath/template/page/html/topmenu/renderer.phtml

Ниже приведен код для renderer.phtml

$html = ";

$children = $menutree->Получить детей(); $Родительский уровень= $menutree->getLevel(); $childlevel = is_null($родителЬский уровень)? 0 : $Родительский уровень +1;

$счетчик =1; $количество детей = $дети->количество();

$Родительский класс позиции = $menutree->getpositionclass(); $itempositionclassprefix = $Родительский класс? $Класс родительского положения . '-': 'нав-';

Если(Маг::приложение()->getStore()->iscurrentlysecure()){$mediaurl= Маг::getbaseurl(mage_core_model_store::URL_TYPE_MEDIA,true);}остальное{
$медиаурл= Маг::getbaseurl(mage_core_model_store::URL_TYPE_MEDIA);}

Для каждого ($дети как $ребенок) { $дочерний ->Установленный уровень ($дочерний уровень); $ребенок->Первый набор ($счетчик == 1); $ребенок->setislast ($счетчик = = $количество детей); $дочерний->setpositionclass($itempOsitioncLassпРефикс. $счетчик);

$outermostClassCode = 'level' . $childLevel;
$_hasChildren = ($child->hasChildren()) ? 'has-children' : '';

if ($childLevel != 0) {
    $urls = $mediaurl . 'catalog/category/' . $child->getData('thumbnail');
    $img = '<img src="' . $urls . '" alt="' . $child->getName() . '" />';
}

$html .= '<li ' . $this->_getRenderedMenuItemAttributes($child) . '>';

if ($childLevel != 0) {
    $html .= '<a href="' . $child->getUrl() . '" class="' . $outermostClassCode . ' ' . $_hasChildren . '">' . $img .

$это->escapeHTML($это->($дочерний->getName()))."; } еще { $html.= 'getURL().' "класс="' . $Самый внешний код класса. ''. $_детей.'">' . $this->escapeHTML($this->($дочерний->getName()))."; }

if (!empty($childrenWrapClass)) {
    $html .= '<div class="' . $childrenWrapClass . '">';
}

$nextChildLevel = $childLevel + 1;

if (!empty($_hasChildren)) {
    $html .= '<ul class="level' . $childLevel . '">';
    $html .= '<li class="level' . $nextChildLevel . '">';
    $html .= '<a class="level' . $nextChildLevel . '" href="' . $child->getUrl() . '">';
    $html .= $this->__('View All ') . $this->escapeHtml($this->__($child->getName()));
    $html .= '</a>';
    $html .= '</li>';
    $html .= $this->render($child, $childrenWrapClass);
    $html .= '</ul>';
}

if (!empty($childrenWrapClass)) {
    $html .= '</div>';
}

$html .= '</li>';

$counter++; }

Возвращает $html;

Author: Anshu Mishra, 2015-03-03

2 answers

Модифицированный метод getCacheKeyInfo в классе Mage_Page_Block_Html_Topmenu, как показано ниже

public function getCacheKeyInfo()
    {
        $shortCacheId = array(
            'TOPMENU',
            Mage::app()->getStore()->getId(),
            (int)Mage::app()->getStore()->isCurrentlySecure(), // newly added line to check if secure or non secure
            Mage::getDesign()->getPackageName(),
            Mage::getDesign()->getTheme('template'),
            Mage::getSingleton('customer/session')->getCustomerGroupId(),
            'template' => $this->getTemplate(),
            'name' => $this->getNameInLayout(),
            $this->getCurrentEntityKey()
        );
        $cacheId = $shortCacheId;

        $shortCacheId = array_values($shortCacheId);
        $shortCacheId = implode('|', $shortCacheId);
        $shortCacheId = md5($shortCacheId);

        $cacheId['entity_key'] = $this->getCurrentEntityKey();
        $cacheId['short_cache_id'] = $shortCacheId;

        return $cacheId;
    }
 1
Author: Anshu Mishra, 2015-06-15 07:19:32

Самым простым решением может быть не беспокоиться о том, какой протокол использует пользователь, заставляя src на изображении быть относительно протокола. Это дает преимущество в том, что кэш не разбавляется.

$url = preg_replace('~^https?:~i', '', Mage::helper('catalog/category')->getCategoryUrl($category));

Примечание: Единственное предостережение к этому заключается в том, что это будет работать только в том случае, если ваш медиа-домен/путь одинаковы (за исключением протокола) для обоих протоколов (настройки web/unsecure/base_media_url и web/unsecure/base_media_url). Хотя я обнаружил, что они, как правило,

 0
Author: Peter O'Callaghan, 2015-03-03 09:18:24