Caching

Retrieving the cache object

<?php Mage::app()->getCache();

Checking if a Cache Type is Enabled

<?php
Mage::app()->useCache($cache_type);

Saving to and Retrieving from Cache

Setting $lifetime to 0 or null means the value will be cached indefinitely, alternately enter a second value.

<?php
$cache->save($value, $key, $tags = array(), $lifeTime=null);
$cache->load($key);
$cache->remove($key);

Clearing a Cache using Tags

<?php $cache->clean($tags = array());

Clearing Cache from the Admin

To clear the custom caches from the admin, use the “Flush Cache Storage” button, as the “Flush Magento Cache” button only deals with Magento’s own cache. Obviously, this is if a custom cache type hasn’t been added to the admin using the method above.

For your custom cache type to appear in the admin, use the following XML to your module’s config file:

<global>
    <cache>
        <types>
             <your_cache_type module="your_module" translate="label description">
                <label>Your Custom Cache Label</label>
                <description>Description of cache type.</description>
                <tags>YOUR_CACHE_TAG</tags>
             </your_cache_type>
        </types>
    </cache>
</global>

Block Caching

To change the caching methods on a block, you can change the cache key to make the block cache for a specific thing. Eg, for a category key:

<?php $block->setCacheKey($category_key);

Or, in XML:

<block type="custom/block" name="custom.block">
    <action method="setCacheKey">
        <key>my_key</key>
        <!-- or to make it dynamic... -->
        <key helper="myhelper/getCacheKey" />
    </action>
</block>

Turning off Caching for a Block

$block->setCacheLifetime(null);

In XML:

<action method=”setCacheLifetime” />

Making a Block Cache Permenantly

<?php $block->setCacheLifetime(false);

Magento’s Topmenu

Very few blocks cache by default in Magento, however the Topmenu block is set up to (presumably because of the possibly heavy queries in generating them)

Caching should be set in a block’s constructor if it’s not being set in XML. E.g, The Mage_Page_Block_Html_Topmenu‘s constructor looks like the following:

<?php
public function _construct()
{
    $this->addData(array(
        'cache_lifetime' => false,
    ));
}

This behaves the same as $this->setCacheLifetime(false), meaning it will cache indefinitely. A problem with the top menu is that it caches regardless of whether the page is secure or not. If a secure page loads an unsecured cache then any links to elements will cause browser warnings; to get around this, we can do something like the following in the constructor which will create a separate cache of the block for http and https:

<?php
$this->addData('cache_key', Mage::app()->getStore()->isCurrentlySecure() ? "secure" : "unsecure");

**TODO: getCacheKeyInfo **