Provo a memorizzare nella cache il blocco che visualizza il menu (ad esempio un modulo da Cmssmart_megamenu).Magento cache - Regola per pulire la cache
La versione precedente era:
<block type="megamenu/navigation" name="catalog.topnav.megamenu">
<action method="unsetData"><key>cache_lifetime</key></action>
<action method="unsetData"><key>cache_tags</key></action>
</block>
Così l'autore è stato explicetly invalidante cache. Ho rimosso i 2 unsetData e aggiunto un metodo _construct() nella classe Cmsmart_Megamenu_Block_Navigation.
class Cmsmart_Megamenu_Block_Navigation extends Mage_Catalog_Block_Navigation
{
protected function _construct()
$this->addData(array(
'cache_lifetime' => 86400,
'cache_key' => "my_key_mega_menu",
'cache_tags' => array(Mage_Catalog_Model_Category::CACHE_TAG, Mage_Cms_Model_Block::CACHE_TAG)
));
Suona come funziona, posso vedere il file di cache: mago --- 8ea_MY_KEY_MEGA_MENU. in var/cache. Tuttavia, scompare dalla cache dopo un minuto. In realtà non appena inizia il prossimo cron (è programmato ogni mn)
Ho usato Aoe-template_hint e posso vedere una casella verde per questo blocco, il che significa che è memorizzato nella cache, con anche la durata impostata correttamente su 86400, quindi Cosa c'è che non va?
questo è il mio primo tentativo, cosa pensi sia sbagliato qui? Esiste un'altra regola oltre alla durata della scadenza di un file? Forse c'è un link nascosto con un altro blocco che scade prima? una cache di meno di 1 min è strano comunque ...
Nota: Ho lo stesso problema su Windows o Linux, e con o senza Redis
grazie
Hai provato con un tag della cache completamente inventato?Qualcosa di inaspettato come una stringa 'my_own_cache_tag' solo per essere sicuro che non ci sia davvero un cron che esegue una pulizia basata sul tag di cache di base che stai usando lì? –
sì, lo stesso si applica – Rod
deve provare a sovrascrivere 'public function toHtml()' e aggiungere un 'echo 'cache_lifetime è:'. $ This-> getCacheLifetime(); return parent :: toHtml(); 'Lì? Dovrebbero accadere due cose: se la cache è fredda (non creata) dovrebbe echeggiare il cache_lifetime che hai specificato nel tuo costrutto, se la cache è costruita (calda) non dovrebbe echeggiare alcun cache_lifetime. –