Я пытаюсь добавить список брендов в раскрывающийся список каждой категории из главного меню. Я считаю, что это будет считаться «мега меню».
Например, если я наведу указатель мыши на основную категорию, в раскрывающемся меню будут отображаться не только подкатегории, но и все различные бренды внутри этой категории.
Бренды создаются двумя способами:
Все продукты имеют атрибут «бренд». Поэтому мы могли бы попытаться получить все продукты внутри категории и отобразить список всех брендов, связанных с продуктами в этой категории. Это должно включать многоуровневую навигацию, чтобы при выборе этого пункта меню отображался фильтр элементов из этой категории И этого атрибута бренда.
Я думаю, что этот метод будет проще - у каждого бренда уже есть своя собственная категория, и каждый продукт находится как в основной категории, так и в соответствующей категории бренда. Изначально это было сделано для того, чтобы мы могли показать большой список всех брендов. Есть ли в Magento функция внутри цикла навигации для получения «других выбранных категорий»? Например. Если элемент находится в категории A, в раскрывающемся списке отображаются все подкатегории, а также любые другие связанные категории верхнего уровня, выбранные для продуктов.
Я пробовал различные решения, которые включали изменение Navigation.php (magento 1.6), но я мог заставить его отображать только ВСЕ бренды в магазине, а не только бренды в определенной категории. См. код ниже:
// Navigation.php code
// render children
$htmlChildren = '';
$j = 0;
foreach ($activeChildren as $child) {
$htmlChildren .= $this->_renderCategoryMenuItemHtml(
$child,
($level + 1),
($j == $activeChildrenCount - 1),
($j == 0),
false,
$outermostItemClass,
$childrenWrapClass,
$noEventAttributes
);
$j++;
}
if (!empty($htmlChildren)) {
if ($childrenWrapClass) {
$html[] = '<div class="' . $childrenWrapClass . '">';
}
$html[] = '<ul class="level' . $level . '">';
$html[] = $htmlChildren;
// My modifications start here
$product = Mage::getModel('catalog/product');
$attributes = Mage::getResourceModel('eav/entity_attribute_collection')
->setEntityTypeFilter($product->getResource()->getTypeId())
->addFieldToFilter('attribute_code', 'brands');
$attribute = $attributes->getFirstItem()->setEntity($product->getResource());
$manufacturers = $attribute->getSource()->getAllOptions(false);
$html[] = '<ol id="nav-drop-brands">';
foreach ($manufacturers as $manufacturer) {
$html[] = '<li><a href="http://www.domain.com/catalogsearch/advanced/result?manufacturer[]=';
$html[] = $manufacturer['value'];
$html[] = '">';
$html[] = $manufacturer['label'];
$html[] = '</a></li>';
}
$html[] = '</ol>';
// end of my modifications
$html[] = '</ul>';
if ($childrenWrapClass) {
$html[] = '</div>';
}
}
$html[] = '</li>';
$html = implode("\n", $html);
return $html;
}