2012-10-18 10 views
5

Sto avendo un po 'di tempo a capire il codice/parametri per perforare la Full Page Cache in Magento per il blocco Mage_Catalog_Block_Product_Price. Posso ottenere il prezzo per mostrare la prima volta che la pagina viene caricata, ma quando l'id della cache è univoco, non esegue correttamente il rendering del prezzo (lo memorizza nella cache correttamente quando deve essere memorizzato nella cache). So che ho bisogno di inviare parametri, come product_id, ecc, ma non chiaro su cosa (ad esempio 'xx') deve essere inviato da getCacheKeyInfo nel contenitore della cache per l'uso in $ this -> _ segnaposto-> getAttribute ('xx'). E che cosa deve essere preparato e inviato da _renderView() al layout/vista del prezzo.Punzonatura di fori Mage_Catalog_Block_Product_Price in Magento EE FPC

Finora ho fatto quanto segue con successo (ognuno di essi i dati di test di uscita)

  • creato il cache.xml nel mio modulo/etc cartella
  • creato il modello contenitore di cache e verificato opere (basta impostazioni)
  • Riscritta/esteso il Mage_Catalog_Block_Product_Price nel mio proprio modello per aggiungere il getCacheKeyInfo()

Quindi il problema è che ho provato molti variatio ns all'interno del modello del contenitore _getCacheId() e _renderBlock() in combinazione con getCacheKeyInfo(), come descritto sopra. Ma sto colpendo un ostacolo. Se qualcuno può guidarmi nella giusta direzione, sarebbe molto apprezzato.

+0

Ancora avere questo problema? Hai provato senza riscrivere il blocco in primo luogo? –

risposta

2

Ho anche avuto problemi con il caching della pagina intera.
Queste sono le mie conclusioni e mi sono state di grande aiuto.

Si prega di dare un'occhiata a: app/code/core/Enterprise/PageCache/Model/Processor/Default.php Linea 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; 
} 

Guardando questa funzione sembra che ci siano due modi per evitare (disabilitazione) la pagina completa cache:

GET parametri:
È possibile utilizzare i parametri "store" o "from_store" con tre underscore per evitare la cache. Esempio:

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

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

variabile di sessione:
si potrebbe anche evitare la pagina di cache completa impostando una variabile (temporanea) della sessione:

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