Magento - получите поддающиеся фильтрованию атрибуты по категориям

Я создал пользовательский модуль навигации специально для веб-сайта, но я действительно хочу смочь перечислить поддающиеся фильтрованию атрибуты определенной категорией. Таким образом, например, моя основная навигация:

  • Категория 1
  • Категория 2
  • Категория 3 и т.д.

Я затем это, когда пользователь мыши по категории, им затем дарят расширенное меню с несколькими поддающимися фильтрованию опциями, например:


Категория 1

Представление производителем:

  • Производитель 1
  • Производитель 2
  • Производитель 3 и т.д.

Я могу получить все поддающиеся фильтрованию атрибуты для хранилища, но я хочу, чтобы этот список вытянул только в поддающихся фильтрованию атрибутах на категорию, что касается Категории экземпляра 1 может иметь различных производителей к Категории 2. Я затем должен кэшировать эти результаты, поскольку это не будет часто изменяться.

12
задан wiseguydigital 1 July 2010 в 12:36
поделиться

1 ответ

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), что ключ кеша другой.

Надеюсь, это поможет!

Спасибо, Джо

2
ответ дан 2 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: