Я потратил немного времени, пытаясь понять это, но безрезультатно. Если бы у меня была серия страниц, на которой была отображена коллекция продуктов, отфильтрованных производителем, и мне нужна была какая-то навигация в, скажем, в левой колонке на каждой из этих страниц, которая содержала список категорий, содержащих продукты текущего производителя, как бы Я собираюсь заполнить это, не прибегая к какому-то ужасно медленному коду? (Есть несколько тысяч продуктов).
Я мог бы поместить что-то похожее на это в цикле, повторяя каждую категорию, видя, есть ли какие-либо результаты для производителя, возвращаемого для каждой категории, но это будет довольно медленным, учитывая, что существует несколько сотен категорий.
$category = $currentCategory; $layer = Mage::getSingleton('catalog/layer'); $layer->setCurrentCategory($category); $attributes = $layer->getFilterableAttributes(); $manufacturers = array(); foreach ($attributes as $attribute) { if ($attribute->getAttributeCode() == 'manufacturer') { $filterBlockName = 'catalog/layer_filter_attribute'; $result = Mage::app()->getLayout()->createBlock($filterBlockName)->setLayer($layer)->setAttributeModel($attribute)->init(); foreach($result->getItems() as $option) { $manufacturers[$option->getValue()] = $option->getLabel(); } } }
Я был бы очень благодарен, если бы у кого-нибудь были лучшие идеи.
Добавьте собственный атрибут категории allmanufacturers (http://inchoo.net/ecommerce/magento/how-to-add-new-custom-category-attribute-in-magento/).
Запустите cron, который будет проходить через все продукты для каждой категории, чтобы проверить его производителя, и в этом атрибуте клиента allmanufacturers введите (,) разделяемое значение производителя.
Теперь в вашем коде вам просто нужно проверить значение «custom category attribute – allmanufacturers» для конкретного производителя и заполнить левую колонку.