Co zrobić by cache w Magento1 odświeżał się automatycznie?

W Magento najczęściej wprowadzasz zmiany na produktach, kategoriach czy wpisach bloga. Zapomniałem o blokach statycznych, w nich również mogę pojawić się zmiany. Prawie za każdym razem gdy nanosimy zmiany w naszym sklepie Magento zastanawiamy się: dlaczego nie widać efektu tych zmian po stronie klienta?

Tak, trzeba pamiętać by odświeżyć pamięć CACHE Magento, zanim zaczniemy analizować jak wygląda nasz sklep Magento po korektach. Wówczas w panelu Magento odwiedzamy stronę System > Zarządzanie Cache i odświeżamy. Jeśli zmiany nanosimy często, to odświeżanie pamięci Cache w Magento może okazać się dość uciążliwe i z pewnością wydłużą naszą pracę.

Automatyczne odświeżanie Cache w Magento

Na szczęście można z tą rutyną walczyć i jest na nią sposób. Poniższy skrypt można wykorzystać do automatycznego odświeżania całej pamięci Cache w Magento.

class <namespace>
  <modulename>_Model_Observer {

        public function refreshcache()
        {
            try {
                $allTypes = Mage::app()->useCache();
                foreach ($allTypes as $type => $blah) {
                    Mage::app()->getCacheInstance()->cleanType($type);
                }
            } catch (Exception $e) {
                // do something
                error_log($e->getMessage());
            }
        }
    }

Gdyby z jakichś względów nie powinno się odświeżać całego Cache’a  w sklepie Magento, można posłużyć się skryptem usuwającym tylko nie aktualne elementy cache.:

class <namespace>
   <modulename>_Model_Observer {

        public function refreshcache()
        {
            $invalidatedTypes = Mage::app()->getCacheInstance()->getInvalidatedTypes();
            foreach ($invalidatedTypes as $type) {
                Mage::app()->getCacheInstance()->cleanType($type->getId());
                Mage::log('Cache Type '.$type->getId()." Is Refresh.",null,'Refresh_Cache.log');
            }
        }
    }

Pozostaje tylko gdzieś wprowadzić jeden z przykładów do Magento. Sugeruję użyć do tego celu nowy moduł magento.

W module tym użyj pliku:

{{namespace}}/{{modulename}}/Model/Observer.php

by umieścić w nim metodę refreshcache a następnie uruchom zadanie CRON dodając taki oto wpis w pliku etc/config.xml

<config>
    ...
    <crontab>
      <jobs>
        <{{modulename}}_refresh_cache>
          <schedule><cron_expr>* * * * *</cron_expr></schedule>
          <run><model>{{modulename}}/observer::refreshcache</model></run>
        </{{modulename}}_refresh_cache>
      </jobs>
    </crontab>
    ...
  </config>

Jeśli wszystko poszło zgodnie z planem to nigdy już nie będzie trzeba pamiętać o odświeżaniu pamięci Cache w Magento.

Podobne artykuły