I’ve come across several places where I’ve needed to get the current category (or information from it) in one way or another. Some blocks have the ability to do this:
$_category = $this->getCurrentCategory();
However, if you need to get the current category in a block (or model, helper, whichever) where this method isn’t present, then we can simply do this instead:
$_category = Mage::registry('current_category');
They both return exactly the same object (unless overridden, that is Mage_Catalog_Model_Category).
Caveat: If you are in a block that doesn’t have access to ‘getCurrentCategory’ nor is Mage::registry(‘current_category’) defined (for example, the product list being applied to the home/front page) you can load by category ID if known. In this example, the Mage_Catalog_Block_Product_List has been applied to the front page, so you’d need to do this instead:
// Check for $_category's existance/status after initial block load, and grab the category ID from the object's parameters/attributes.
// Replace $this->getCategoryId() with a category ID, whether defined statically or retrieved from another method.
if (!is_object($_category))
$_category = Mage::getModel('catalog/category')->load($this->getCategoryId());
Of course, this ends up being slightly different depending on where you need to get the category object.