Xml magento禁用价格块的缓存

Xml magento禁用价格块的缓存,xml,magento,caching,layout,block,Xml,Magento,Caching,Layout,Block,在我的项目中,我们使用的是Magento Enterprise Edition 1.14.1。直接从数据库动态更改商店中的价格。因此,问题是Magento会缓存所有内容的完整页面缓存,这样更改就不会在前端受到影响。因此,我们决定禁用该特定块的缓存。我知道它可以在布局文件中完成。我签入layout catalog.xml,在块中找到了它 <block type="catalog/product_price_template" name="catalog_product_price_templ

在我的项目中,我们使用的是Magento Enterprise Edition 1.14.1。直接从数据库动态更改商店中的价格。因此,问题是Magento会缓存所有内容的完整页面缓存,这样更改就不会在前端受到影响。因此,我们决定禁用该特定块的缓存。我知道它可以在布局文件中完成。我签入layout catalog.xml,在块中找到了它

<block type="catalog/product_price_template" name="catalog_product_price_template" />
所以在这里我不知道如何禁用它。我已尝试在app/etc/local.xml中将缓存的fife时间设置为null

并在layout/catalog.xml中尝试

<block type="catalog/product_price_template" name="catalog_product_price_template" >
         <action method="setCacheLifetime" />
        </block>
试过了,

<block type="catalog/product_price" name="Mage_Catalog_Block_Product_Price">
        <action method="setCacheLifetime"><value>false</value></action>
        </block>

但是没有运气

我在layout/bundle.xml文件中发现了一些其他价格块。我们也在使用捆绑产品。所以我们也必须禁用这个缓存?任何帮助都将不胜感激。谢谢

您可以看到这个链接跟踪方法被添加到这个文件Mage/Catalog/Block/Product/Price.php中

protected function _construct()
{
    $this->addData(
      array('cache_lifetime'    => false,)
    );
}
您可以看到这个链接跟踪方法被添加到这个文件Mage/Catalog/Block/Product/Price.php中

protected function _construct()
{
    $this->addData(
      array('cache_lifetime'    => false,)
    );
}
试一试

HTH

试试看


HTH

在深入研究magento缓存技术之后,我遇到了一个决定。在此之前,我想描述一下我得到的。基本上有两种解决方案可以禁用特定块或缓存标记的缓存

一,。使用块禁用缓存

这类似于设置缓存的生存期

<reference name="needed block">
    <action method="setCacheLifetime"><s>null</s></action>
</reference>
而且这种类型的缓存将只清除块缓存。 所以我们不能使用这个解决方案

二,。打孔: Magento还有另一个默认功能,即我们可以使用缓存标记覆盖FPC进程

Magento按标记名保存缓存。因此,我们可以在页面呈现之前获取该标记,并且可以禁用再次缓存该标记。因此,每次页面加载时,该标记都不会被缓存

我以前试着用observer core_block_abstract_to_html_来实现它

但是没有为price定义的price的CACHE_标记

我们可以使用_构造函数直接在price类中设置缓存的生存时间,如

$this->addData(array(
‘cache_lifetime’=> false,
‘cache_tags’    => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Catalog_Product_Price::CACHE_TAG)
));
正如我前面提到的,价格没有缓存标签。所以我们也不能用这个把戏

但我发现一件事,如果我们从管理员那里保存产品,那么更改会立即反映在前端。所以我在这方面做了更多的研究,我找到了解决办法

Magento调用以下控制操作

Mage_Adminhtml_Catalog_ProductController::saveAction()  
这个将调用下面的方法

Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)
如果您看到此函数,它们将清除缓存并重新编制索引

public function applyAllRulesToProduct($product)
    {
      .......    
        $this->getResource()->applyAllRules($product);
        $this->_invalidateCache();

        Mage::getSingleton('index/indexer')->processEntityAction(
            new Varien_Object(array('id' => $product->getId())),
            Mage_Catalog_Model_Product::ENTITY,
            Mage_Catalog_Model_Product_Indexer_Price::EVENT_TYPE_REINDEX_PRICE
        );

        return $this;
    } 
在我的例子中,我只使用以下代码

$object->setPrice(555);
Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId);
$object->save();

在深入研究magento缓存技术之后,我遇到了一个决定。在此之前,我想描述一下我得到的。基本上有两种解决方案可以禁用特定块或缓存标记的缓存

一,。使用块禁用缓存

这类似于设置缓存的生存期

<reference name="needed block">
    <action method="setCacheLifetime"><s>null</s></action>
</reference>
而且这种类型的缓存将只清除块缓存。 所以我们不能使用这个解决方案

二,。打孔: Magento还有另一个默认功能,即我们可以使用缓存标记覆盖FPC进程

Magento按标记名保存缓存。因此,我们可以在页面呈现之前获取该标记,并且可以禁用再次缓存该标记。因此,每次页面加载时,该标记都不会被缓存

我以前试着用observer core_block_abstract_to_html_来实现它

但是没有为price定义的price的CACHE_标记

我们可以使用_构造函数直接在price类中设置缓存的生存时间,如

$this->addData(array(
‘cache_lifetime’=> false,
‘cache_tags’    => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Catalog_Product_Price::CACHE_TAG)
));
正如我前面提到的,价格没有缓存标签。所以我们也不能用这个把戏

但我发现一件事,如果我们从管理员那里保存产品,那么更改会立即反映在前端。所以我在这方面做了更多的研究,我找到了解决办法

Magento调用以下控制操作

Mage_Adminhtml_Catalog_ProductController::saveAction()  
这个将调用下面的方法

Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId)
如果您看到此函数,它们将清除缓存并重新编制索引

public function applyAllRulesToProduct($product)
    {
      .......    
        $this->getResource()->applyAllRules($product);
        $this->_invalidateCache();

        Mage::getSingleton('index/indexer')->processEntityAction(
            new Varien_Object(array('id' => $product->getId())),
            Mage_Catalog_Model_Product::ENTITY,
            Mage_Catalog_Model_Product_Indexer_Price::EVENT_TYPE_REINDEX_PRICE
        );

        return $this;
    } 
在我的例子中,我只使用以下代码

$object->setPrice(555);
Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId);
$object->save();
Magento 1.9.2.1 我的解决办法是加上:

<action method="unsetData"><key>cache_lifetime</key></action>
<action method="unsetData"><key>cache_tags</key></action>
Magento 1.9.2.1 我的解决办法是加上:

<action method="unsetData"><key>cache_lifetime</key></action>
<action method="unsetData"><key>cache_tags</key></action>

除了这个问题,你还可以试试

<reference name="footer">
    <action method="setCacheLifetime"></action>
</reference>
这会使setCacheLifetime为空。根据你的问题,你没有查出来。在上找到了解决方案。那里的作者说

这是因为Varien_Object->_调用可以方便地处理缺少的参数,并用null替换它们,幸运的是,这正是我们在这里需要的


除了这个问题,你还可以试试

<reference name="footer">
    <action method="setCacheLifetime"></action>
</reference>
这会使setCacheLifetime为空。根据你的问题,你没有查出来。在上找到了解决方案。那里的作者说

这是因为Varien_Object->_调用可以方便地处理缺少的参数,并用null替换它们,幸运的是,这正是我们在这里需要的

对不起,我看见你了
我试过了。您确定您的布局文件正确吗?是否确实删除了缓存以查看效果?您还可以重写setCacheLifetime方法,以检查给定的xml句柄使其被忽略。抱歉,我看到您已经尝试过了。您确定您的布局文件正确吗?是否确实删除了缓存以查看效果?您还可以重写setCacheLifetime方法,以检查给定的xml句柄使其忽略。您将此添加到哪个文件?在哪个标签里面?你把这个添加到哪个文件?在什么标签里面?谢谢你的输入。但是我已经尝试了所有的可能性。它不起作用。谢谢你的意见。但是我已经尝试了所有的可能性。它不起作用。