Моя структура меню примерно такая:
Root
----Categ1
-------Categ11
---------Categ111
---------Катег112
-------Катег12
---------Катег121
---------Катег122
----Катег2
----Катег3
----Categ4
Я использую начальную загрузку.
Мне нужно показать только активные узлы и дочерние элементы верхнего уровня. Для моего примера мне нужно, чтобы меню открывалось следующим образом (я нажал на категорию 112 и подкатегории категории 12 были скрыты):
Root
----Categ1
-------Categ11
---------Categ111
---------Categ112
-------Categ12
----Categ2
----Categ3
----Categ4
Функция PHP, которая генерирует мое дерево меню:
/** show all subcategs of the selected category
* @param $iCategIDSelected
* @param null $arrCategs
* @param bool $bIsOnTheLeaf
* @return string
*/
static function getHTMLCategsForMenuBySelected($iCategIDSelected, $arrCategs=null, $arrAllParents=null){
$bIsVisible = false;
if($arrCategs == null){
$oController = new ShopcategoriesController();
$arrCategs = $oController->getShopCategories(0);
}
//find if we make the current node visible or not
//if the current node id is on the parent's of the selected node then make it visible
//take all nodes starting with root until the selected node
if($arrAllParents==null){
$arrAllParents = ShopcategoriesController::getParentsBySelectedCategID($iCategIDSelected,$arrCategs);
}
$sHTML = '
- ';
foreach($arrCategs as $oneCateg){
//find if is active or not
$bActiveClass = '';
if(in_array($oneCateg['id'],$arrAllParents)){$bActiveClass = 'active';}
$sHTML .= ' - ';
$sHTML .= 'Categ1
Categ11
Categ111 - Categ112
[*]
Categ2 Categ3
Categ4
Подробнее здесь: https://stackoverflow.com/questions/325 ... tive-nodes
Мобильная версия