'Blocks HTML' Cache Types are invalidated

升级magento到1.5之后,后台Cache Storage Management那里好像出现了一点小问题,基本上每次将Blocks HTML output改为enabled之后,第二天又会是invalidated(我这里因为cron每天都会执行catalogrule),或者每次在后台任意点开某个product,然后再save,Blocks HTML output也会从enabled变为invalidated,google了一下,很多人好像都遇到了这个问题,类似于One or more of the Cache Types are invalidated: Blocks HTML output. Click here to go to Cache Management and refresh cache types.这样的提示。

通过看源码之后发现,这个bug似乎又不像是个bug,为什么呢?看catalogrule的config.xml,里面有段
        <catalogrule>
            <related_cache_types>
                <block_html/>
            </related_cache_types>
        </catalogrule>

我们发现,和catalogrule关联的cache块是block_html,我说的cache块是指进后台Cache Storage Management,Associated Tags对应的值,只不过后台是大写的。

当我们进入后台product编辑页,即便什么也不做,点save,经过层层触发,会进入CatalogRule/Model/Rule.php,看function applyAllRulesToProduct,有$this->_invalidateCache()这么一句,再进入function _invalidateCache,code如下:
    protected function _invalidateCache()
    {
        $types = Mage::getConfig()->getNode(self::XML_NODE_RELATED_CACHE);
        if ($types) {
            $types = $types->asArray();
            Mage::app()->getCacheInstance()->invalidateType(array_keys($types));
        }
        return $this;
    }

$types = Mage::getConfig()->getNode(self::XML_NODE_RELATED_CACHE)这一句替换完宏就是
$types = Mage::getConfig()->getNode('global/catalogrule/related_cache_types'),看最上面的config.xml,$types最终得到的值是block_html,所以下面的invalidateType就将block_html设为了invalidated。

这里我也很迷惑,不知道magento的用意是什么?貌似1.4版本不会出现这个问题。
相关解决方法及讨论 http://www.magentocommerce.com/boards/viewthread/219407/

你可能感兴趣的:(html,cache,function,output,Magento,Types)