/** * Рекурсивная функция для формирования меню навигации * * @param object $navi_menu меню (шаблоны, параметры) * @param array $navi_items (пункты по родителям) * @param array $navi_active_way ("активный путь") * @param array $navi_item_tpl (шаблоны пунктов) * @param int $parent (исследуемый родитель, изначально 0 - верхний уровень) * @return string $navi - готовый код навигации */ function printNavi($navi_menu, $navi_items, $navi_active_way, $navi_item_tpl, $parent = 0) { // выясняем уровень $navi_item_level = $navi_items[$parent][0]['navi_item_level']; // собираем каждый пункт в данном родителе -> в переменной $item foreach ($navi_items[$parent] as $row) { // Проверяем пункт меню на принадлежность к "активному пути" и выбираем шаблон $item = in_array($row['Id'], $navi_active_way) ? $navi_item_tpl[$navi_item_level]['active'] : $navi_item_tpl[$navi_item_level]['inactive']; ################### ПАРСИМ ТЕГИ ################### // id @($item = str_replace('[tag:linkid]', $row['Id'], $item)); // название @($item = str_replace('[tag:linkname]', $row['title'], $item)); // ссылка if (strpos($row['navi_item_link'], 'module=') === false && start_with('index.php?', $row['navi_item_link'])) { $item = str_replace('[tag:link]', $row['navi_item_link'] . "&doc=" . (!$row['document_alias'] ? prepare_url($row['title']) : $row['document_alias']), $item); $item = str_ireplace('"//"', '"/"', str_ireplace('///', '/', rewrite_link($item))); } else { $item = str_replace('[tag:link]', $row['navi_item_link'], $item); if (start_with('www.', $row['navi_item_link'])) { $item = str_replace('www.', 'http://www.', $item); } } // target $item = str_replace('[tag:target]', empty($row['navi_item_target']) ? '_self' : $row['navi_item_target'], $item); // описание @($item = str_replace('[tag:desc]', stripslashes($row['navi_item_desc']), $item)); // изображение @($item = str_replace('[tag:img]', stripslashes($row['navi_item_Img']), $item)); @($img = explode(".", $row['navi_item_Img'])); @($row['Img_act'] = $img[0] . "_act." . $img[1]); @($item = str_replace('[tag:img_act]', stripslashes($row['Img_act']), $item)); @($item = str_replace('[tag:img_id]', stripslashes($row['navi_item_Img_id']), $item)); ################### /ПАРСИМ ТЕГИ ################## // Определяем тег для вставки следующего уровня switch ($navi_item_level) { case 1: $tag = '[tag:level:2]'; break; case 2: $tag = '[tag:level:3]'; } // Если есть подуровень, то заново запускаем для него функцию и вставляем вместо тега if (!empty($navi_items[$row['Id']])) { $item_sublevel = printNavi($navi_menu, $navi_items, $navi_active_way, $navi_item_tpl, $row['Id']); $item = @str_replace($tag, $item_sublevel, $item); } else { $item = @str_replace($tag, '', $item); } // Подставляем в переменную навигации готовый пункт if (empty($navi)) { $navi = ''; } $navi .= $item; } // Вставляем все пункты уровня в шаблон уровня switch ($navi_item_level) { case 1: $navi = str_replace("[tag:content]", $navi, $navi_menu->navi_level1begin); break; case 2: $navi = str_replace("[tag:content]", $navi, $navi_menu->navi_level2begin); break; case 3: $navi = str_replace("[tag:content]", $navi, $navi_menu->navi_level3begin); break; } // Возвращаем сформированный уровень return $navi; }
/** * Рекурсивная функция для формирования меню навигации * * @param string $navi * @param int $ebenen * @param string $way * @param int $rub * @param array $nav_items * @param string $row_ul * @param int $parent */ function printNavi(&$navi, &$ebenen, &$way, &$rub, &$nav_items, &$row_ul, $parent = 0) { $ebene = $nav_items[$parent][0]['navi_item_level']; switch ($ebene) { case 1: $navi .= $row_ul->navi_level1begin; break; case 2: $navi .= $row_ul->navi_level2begin; break; case 3: $navi .= $row_ul->navi_level3begin; break; } foreach ((array) $nav_items[$parent] as $row) { // $aktiv = (in_array($row['Id'], $way) || strpos($row['navi_item_link'], 'index.php?' . $_SERVER['QUERY_STRING']) !== false) ? 'aktiv' : 'inaktiv'; $aktiv = in_array($row['Id'], $way) ? 'aktiv' : 'inaktiv'; $akt = str_replace('[tag:linkname]', $row['title'], $ebenen[$ebene][$aktiv]); $akt = str_replace('[tag:linkid]', $row['Id'], $akt); if (strpos($row['navi_item_link'], 'module=') === false && start_with('index.php?', $row['navi_item_link'])) { if ($row['navi_item_link'] == 'index.php?id=1') { $akt = str_replace('[tag:link]', ABS_PATH, $akt); } else { $akt = str_replace('[tag:link]', $row['navi_item_link'] . "&doc=" . (empty($row['document_alias']) ? prepare_url($row['title']) : $row['document_alias']), $akt); } } else { // if (strpos($row['navi_item_link'], 'module=') === false) $row['navi_item_link'] = $row['navi_item_link'] . URL_SUFF; $akt = str_replace('[tag:link]', $row['navi_item_link'], $akt); if (start_with('www.', $row['navi_item_link'])) { $akt = str_replace('www.', 'http://www.', $akt); } } $navi .= str_replace('[tag:target]', $row['navi_item_target'], $akt); // $akt = str_replace('[tag:target]', $row['navi_item_target'], $akt); // $navi .= rewrite_link($akt); if (isset($nav_items[$row['Id']])) { printNavi($navi, $ebenen, $way, $rub, $nav_items, $row_ul, $row['Id']); } } switch ($ebene) { case 1: $navi .= $row_ul->navi_level1end; break; case 2: $navi .= $row_ul->navi_level2end; break; case 3: $navi .= $row_ul->navi_level3end; break; } }