示例#1
0
/**
 * Рекурсивная функция для формирования меню навигации
 *
 * @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;
}
示例#2
0
文件: modul.php 项目: laiello/avecms
/**
 * Рекурсивная функция для формирования меню навигации
 *
 * @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;
    }
}