Добавьте класс "активный" в пункт категории верхнего меню, если ребенок является текущим


В topmenu.phtml Я удаляю значение по умолчанию, чтобы мне было проще создавать пользовательское меню с моими собственными классами (для реализации в рамках Foundation CSS с помощью Верхней панели).

Как бы я добавил пользовательский "активный" класс к родительскому <li>, если выбранная дочерняя/дочерняя категория в настоящее время активна?

Я использую следующий код для создания меню:

<ul>
  <?php
       $obj = new Mage_Catalog_Block_Navigation();
       $storeCategories = $obj->getStoreCategories();
       Mage::registry('current_category') ? $currentCategoryId = Mage::registry('current_category')->getId() : $currentCategoryId='';
       foreach ($storeCategories as $_category):
   ?>
           <li class="<!--active class here if child is current -->">
               <a href="#"><?php echo $_category->getName(); ?></a>
               <?php $categoryChildren = $_category->getChildren(); ?>
               <?php if($categoryChildren->count()) : ?>
                   <ul class="dropdown">
                       <?php foreach($categoryChildren as $_categoryChild) : ?>
                           <?php $_categoryChildModel = Mage::getModel('catalog/category')->load($_categoryChild->getId());?>
                           <?php $categoryGrandchildren=$_categoryChild->getChildren(); ?>
                           <li>
                               <?php
                                   $currentCategoryId===$_categoryChild->getId() ? $bold="style=\"font-weight:bold\"" : $bold='';
                                   echo '&emsp;' . '<a href="' . $_categoryChildModel->getUrl() . '"' . $bold . '>' .  $_categoryChild->getName() . '</a>';
                               ?>
                           </li>
                           <?php if($categoryGrandchildren->count()) : ?>
                               <?php foreach($categoryGrandchildren as $_categoryGrandchild) : ?>
                                   <?php $_categoryGrandchildModel = Mage::getModel('catalog/category')->load($_categoryGrandchild->getId());?>
                                   <li>
                                       <?php
                                           $currentCategoryId===$_categoryChild->getId() ? $bold="style=\"font-weight:bold\"" : $bold='';
                                           echo '&emsp;&emsp;' . '<a href="' . $_categoryGrandchildModel->getUrl() . '"' . $bold . '>' .  $_categoryGrandchild->getName() . '(' . $_categoryGrandchildModel->getProductCount() . ')</a>';
                                       ?>
                                   </li>
                               <?php endforeach; ?>
                           <?php endif; ?>
                       <?php endforeach; ?>
                   </ul>
               <?php endif; ?>
           </li>
       <?php endforeach ?>

   </ul>
Author: Joe, 2014-10-29

1 answers

Изменение

<li class="<!--active class here if child is current -->">

До

<li<?php echo in_array($_category->getId(), Mage::registry('current_category')->getPathIds()) ? ' class="custom-active-class"' : '' ?>>

РЕДАКТИРОВАТЬ: Вам нужно добавить идентификатор категории в ключ кэша, чтобы он работал. В противном случае это решение не работало бы с включенным кэшированием блоков.

 5
Author: alex_b, 2014-10-29 19:31:59