在Magento块html缓存中保存Ajax响应

时间:2014-05-30 22:34:20

标签: magento caching

对于这个特定的Magento EE站点,我有一个控制器,它创建一个块并通过Ajax返回它。

$this->loadLayout();
$block = $this->getLayout()->createBlock('catalog/product_list_related','catalog.product.related')->setTemplate(...
$this->getResponse()->setBody($block->toHtml());

足够简单。我想缓存响应,密钥为SKU - CUSTOMER GROUP - DATE。我已经在块中设置了适当的方法来设置密钥,标签和生命周期。一切都好。

但是,没有任何内容保存到缓存中。

我认为,因为它是一个EE网站,所以Enterprise_PageCache占位符阻止了它。但即使在删除它们之后,它也无法保存。

我一直在挖掘app / code / core / Mage / Core / Block / Abstract.php,看看发生了什么。但我想我会检查是否有任何已知的“陷阱”缓存由控制器中的createBlock设置的块。

谢谢! 威尔逊

1 个答案:

答案 0 :(得分:0)

简单而棘手。

首先你应该通过xml插入块(它对缓存更好)。

其次你只需在块文件中插入一个像这样的代码(例如:/fishpig/wordpress/block/post/post.php)

public function __construct(){
    parent::__construct();
    $this->addData(array(
        'cache_lifetime' => 86400, // lifetime on second
        'cache_tags'     => array(Mage_Core_Model_Store::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG), // cache tag
        'cache_key'      => 'Fishpig_Wordpress_Block_Post_List_'.$this->getRequest()->getRequestUri() // cache unique ID IT MUST BE UNIQUE, MUST BE UNIQUE, MUST BE UNIQUE, MUST BE UNIQUE, MUST BE UNIQUE, MUST BE UNIQUE, MUST BE UNIQUE
    ));
}

如果您需要任何有关该代码的帮助,我可以帮助您。