2012-10-18 42 views
5

我有一段時間搞清楚代碼/參數,以打破Mage_Catalog_Block_Product_Price塊的magento中的完整頁面緩存。我可以在第一次顯示頁面時顯示價格,但是當緩存ID是唯一的時候,它不會正確渲染價格(當它應該被緩存時它會正確緩存它)。我知道我需要發送它的參數,如product_id等,但不清楚需要從getCacheKeyInfo發送到緩存容器中用於$ this - > _ placeholder-> getAttribute('xx')的內容(例如'xx' )。還有什麼需要準備並從_renderView()發送到價格佈局/視圖。在Magento EE FPC中打孔Mage_Catalog_Block_Product_Price

到目前爲止,我已經做了成功以下(他們每個輸出的測試數據)

  • 創建我的模塊中/中cache.xml etc文件夾
  • 創建緩存容器模型和驗證工作(只需要設置)
  • 重寫了/延長Mage_Catalog_Block_Product_Price到我自己的模型添加getCacheKeyInfo()

所以問題是,我已經嘗試了許多variatio如上所述,容器模型的_getCacheId()和_renderBlock()與getCacheKeyInfo()結合使用。但我正在遇到一塊絆腳石。如果任何人都能帶領我走向正確的方向,那將不勝感激。

+0

仍然有這個問題?你有沒有嘗試沒有塊重寫呢? –

回答

2

我一直在爲整頁緩存而苦苦掙扎。
這些是我的發現,對我非常有幫助。

請看看:app/code/core/Enterprise/PageCache/Model/Processor/Default.php線47

/** 
* Check if request can be cached 
* 
* @param Zend_Controller_Request_Http $request 
* @return bool 
*/ 
public function allowCache(Zend_Controller_Request_Http $request) 
{ 
    foreach ($this->_noCacheGetParams as $param) { 
     if (!is_null($request->getParam($param, null))) { 
      return false; 
     } 
    } 
    if (Mage::getSingleton('core/session')->getNoCacheFlag()) { 
     return false; 
    } 
    return true; 
} 

看着這個功能似乎有迴避(禁用)全頁面緩存的方式有兩種:

GET參數:
您可以使用前綴爲三個下劃線的參數'store'或'from_store'來避免緩存。 例子:

http://magentourl.com/catelog/category/view/id/123?___store 

Mage::getUrl('catalog/category/view', array('id' => 123, 'query' => array('___store' => ''))) 

Session變量:
您也可避免通過設置(臨時)會話變量的完整頁面緩存:

Mage::getSingleton('core/session')->setNoCacheFlag(true)