2012-02-05 10 views
5

Sto lavorando su un sito di Magento 1.6, che ha il seguente codice XML all'interno del campo della casa di page CMS "Layout XML di aggiornamento":in grado di prevenire Magento da Cache di un blocco

<reference name="content"> 
    <block type="catalog/navigation" name="catalog.category.home" as="homecategory" template="catalog/category/homecategory.phtml" /> 
</reference> 

come modello mostra categorie randomizzate, vorrei disabilitare il caching per questo blocco. Per farlo, ho tentato con getChildHtml ('sub-block-template', false) con il seguente:

(homecategory ha $ this-> getChildHtml ('random_categories', false) nel suo modello)

<reference name="content"> 
    <block type="catalog/navigation" name="catalog.category.home" as="homecategory" useCache="false" template="catalog/category/homecategory.phtml"> 
     <block type="catalog/navigation" name="catalog.category.home.randcats" as="random_categories" useCache="false" template="catalog/category/random.phtml" /> 
    </block> 
</reference> 

Così ora sono bloccato, chiedendomi perché non posso impedire il caching di quel blocco, nonostante l'utilizzo dell'argomento 'falso'.

+0

Non esiste l'attributo 'useCache = "false"'. –

+0

Hai disabilitato la cache Magento in Pannello di amministrazione> Sistema> Gestione cache? – sondoha

+0

È necessario implementare la perforazione della cache della pagina intera per il blocco. Vedi questo tutorial [questo tutorial] (http://tweetorials.tumblr.com/post/10160075026/ee-full-page-cache-hole-punching) e [questa domanda su SO] (http://stackoverflow.com/ domande/8126548/provando-get-dinamico-content-hole-punch-through-magentos-full-page-cache). – Zyava

risposta

3

Hai provato a forzarlo creando un nuovo tipo di blocco personalizzato e sovraccaricando le funzioni di caching? Estendere la classe Mage_Catalog_Block_Product_List_Random e creare un pseudo-costruttore vuoto:

protected function _construct() {} 

Questo impedirà ereditare aggiunta di tag cache, durata, e altri metadati per l'oggetto blocco. Quindi è possibile sovraccaricare anche le informazioni sulla chiave di cache in modo che non utilizzi blocchi di cache esistenti (o abilitati). Ad esempio:

public function getCacheKeyInfo() 
{ 
    return array(
     'MY_CACHE_TAG', 
     Mage::app()->getStore()->getId(), 
     (int)Mage::app()->getStore()->isCurrentlySecure(), 
     Mage::getDesign()->getPackageName(), 
     Mage::getDesign()->getTheme('template') 
    ); 
} 
+0

Grazie, ci proverò. Anche se sto ancora bevendo da Firehose, la creazione di questo blocco personalizzato potrebbe richiedere un po 'di tentativi ed errori. – Excalibur

+1

Forse prova a guardare http://inchoo.net/ecommerce/magento/magento-block-caching/ e vedi se questo ti aiuta lungo la strada? – Jona

+1

Jona, grazie per il link a quell'articolo. Ho notato che quando ha indicato che quando '$ this-> addData (array ('cache_lifetime' => 'false'))' è il caso (che è l'impostazione predefinita per Categoria/Navigazione, ciò significa che la cache si aggiorna automaticamente ogni 2 ore (7200 secondi).Questo è abbastanza buono per le mie esigenze, ed è probabilmente meglio di nessuna memorizzazione nella cache per motivi di prestazioni. – Excalibur

5

Ho avuto lo stesso problema. Credo che debba fare qualcosa con il tipo di blocco type = "catalog/navigation". Ho visto questa disabilitazione del lavoro di cache su altri tipi di blocchi. Ecco una correzione per questo tipo di blocco e questo problema:

di modifica del file phtml: assicurarsi il secondo parametro è falso cambiamento file xml

echo $this->getChildHtml('topCategoriesList',false); 

: Aggiungi queste azioni al blocco

<block type="catalog/navigation" name="topCategoriesList" as="topCategoriesList" template="catalog/navigation/categorylist.phtml"> 
    <action method="unsetData"><key>cache_lifetime</key></action> 
    <action method="unsetData"><key>cache_tags</key></action> 
</block> 
+1

Ha funzionato per me usando solo l'XML. – user3409662

Problemi correlati