Magento использует модель Catalog_Model_Layer
для достижения этой цели, поэтому я думаю, это может быть вашим лучшим выбором.Будьте бдительны, я еще не тестировал этот код:
$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
}
Каждая итерация здесь даст вам объект класса Mage_Catalog_Model_Resource_Eav_Mysql4_Attribute_Collection
, который вы должны иметь возможность повторять в цикле foreach, чтобы получить ваштребуемый вывод.
Для кэширования попробуйте включить кэширование блоков на своем сайте и присвойте блоку тег кэша, как показано ниже.Magento будет кешировать вывод HTML, и все будет в порядке с миром:
protected function _construct() {
$this->addData(array(
'cache_lifetime' => 3600,
'cache_tags' => array(Mage_Catalog_Model_Product::CACHE_TAG),
'cache_key' => $someUniqueIdentifierYouCreate,
));
}
Кеш будет действителен только для ключа, который вы передаете, поэтому убедитесь, что, если меню изменится (w /o очистка кеша, например), что ключ кеша другой.
Надеюсь, это поможет!
Спасибо, Джо