【问题标题】:Save Ajax response in Magento block html cache在 Magento 块 html 缓存中保存 Ajax 响应
【发布时间】:2014-05-30 22:34:20
【问题描述】:

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

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

足够简单。我想缓存响应,键为 SKU - 客户组 - 日期。我已经在块中放置了适当的方法来设置键、标签和生命周期。都很好。

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

我认为,由于它是一个 EE 站点,Enterprise_PageCache 占位符会阻止它。但即使删除了这些,也没有保存。

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

谢谢! 威尔逊

【问题讨论】:

  • 出于某种原因,在 Mage::app 的 $this->_cache _allowedCacheOptions 数组中,'block_html' 设置为 false。所以它为 'canUse()' 缓存返回 false。
  • 原来是 Enterprise_PageCache 使“block_html”缓存失效

标签: magento caching


【解决方案1】:

简单但棘手。

首先你应该通过 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
    ));
}

如果您需要有关该代码的任何帮助,我可能会为您提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2014-01-07
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多