Я создал пользовательский модуль навигации специально для веб-сайта, но я действительно хочу смочь перечислить поддающиеся фильтрованию атрибуты определенной категорией. Таким образом, например, моя основная навигация:
Я затем это, когда пользователь мыши по категории, им затем дарят расширенное меню с несколькими поддающимися фильтрованию опциями, например:
Представление производителем:
Я могу получить все поддающиеся фильтрованию атрибуты для хранилища, но я хочу, чтобы этот список вытянул только в поддающихся фильтрованию атрибутах на категорию, что касается Категории экземпляра 1 может иметь различных производителей к Категории 2. Я затем должен кэшировать эти результаты, поскольку это не будет часто изменяться.
Magento использует для этого модель Catalog_Model_Layer
, так что я предполагаю, что это ваш лучший выбор. Caveat emptor, я еще не тестировал этот код:
$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,
));
}
Кеш будет действителен только для ключа, который вы передаете, поэтому убедитесь, что, если меню должно измениться (без очистки кеша, для instance), что ключ кеша другой.
Надеюсь, это поможет!
Спасибо, Джо