views:

91

answers:

1

I have created a custom navigation module specifically for a website, but I really want to be able to list filterable attributes by a specific category. So for instance my main navigation is:

  • Category 1
  • Category 2
  • Category 3 etc.

I then that when a user mouses over a category, they are then presented with an expanded menu with a few filterable options e.g.:


Category 1

View by manufacturer:

  • Manufacturer 1
  • Manufacturer 2
  • Manufacturer 3 etc.

I am able to get all filterable attributes for the store, but I want this list to pull in only the filterable attributes per category, as for instance Category 1 may have different manufacturers to Category 2. I then need to cache these results as this will not change often.

A: 

Magento uses the model Catalog_Model_Layer to accomplish this, so I'm guessing this may be your best bet. Caveat emptor, I have not tested this code yet:

$layer = Mage::getModel("catalog/layer");
foreach($categories as $categoryid) {
    $category = Mage::getModel("catalog/category")->load($categoryid);
    $layer->setCurrentCategory($category);
    $attributes = $layer->getFilterableAttributes();
    // do something with your attributes
}

Each iteration here will give you an object of the class Mage_Catalog_Model_Resource_Eav_Mysql4_Attribute_Collection, which you should be able to iterate over in a foreach loop to get your desired output.

For caching, try enabling block caching on your site and give the block a cache tag like the following. Magento will cache the HTML output and all will be right with the world:

protected function _construct() {
    $this->addData(array(
        'cache_lifetime' => 3600,
        'cache_tags'     => array(Mage_Catalog_Model_Product::CACHE_TAG),
        'cache_key'      => $someUniqueIdentifierYouCreate,
    ));
}

The cache will only be valid for the key you pass, so make sure that, if the menu is to change (w/o flushing the cache, for instance), that the cache key is different.

Hope that helps!

Thanks, Joe

Joseph Mastey
wiseguydigital
Not sure on that one. Did you make sure to configure your attributes in the backend so that they only display w/ results?
Joseph Mastey
Hey there - still no joy - the closes I have found is the options() method in Mage_Catalog_Model_Category_Attribute_Api, which looks as though it should work fine, but ->getAttribute doesn't seem to exist as a public method in Mage_Catalog_Model_Category. Any thoughts anyone?
wiseguydigital