逆风天 发表于 2022-4-26 13:29:13

Discuz 主导航菜单重写

Discuz 主导航菜单重写
注意:当前重写效果,只支持 bootstrap 3,如要使用其他框架结构,需要你自己修改代码。

正题:模板目录新建 navbar.php,内部内容为
<?php
if ( !defined( 'IN_DISCUZ' ) ) {
exit( 'Access Denied' );
}

function SetHighLight( $HighLight ) {
if ( $HighLight ) {
    $ColorArray = array( '', 'red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple', 'gray' );
    $String = sprintf( '%02d', $HighLight );
    $StyleStr = sprintf( '%03b', $String[ 0 ] );

    $Style = ' style="';
    $Style .= $StyleStr[ 0 ] ? 'font-weight: bold;' : '';
    $Style .= $StyleStr[ 1 ] ? 'font-style: italic;' : '';
    $Style .= $StyleStr[ 2 ] ? 'text-decoration: underline;' : '';
    $Style .= $String[ 1 ] ? 'color: ' . $ColorArray[ $String[ 1 ] ] : '';
    $Style .= '"';
} else {
    $Style = '';
}
return $Style;
}

foreach ( C::t('common_nav')->fetch_all_mainnav() as $GetNav ) {
if ( $GetNav[ 'title' ] ) {
    $NavSpan = '<span>' . $GetNav[ 'title' ] . '</span>';
}
$GetNav[ 'style' ] = SetHighLight( $GetNav[ 'highlight' ] );

if ( $GetNav[ 'logo' ] ) {
    $GetNavLogo = str_replace( '{STATICURL}', STATICURL, $GetNav[ 'logo' ] );
    if ( !preg_match( "/^" . preg_quote( STATICURL, '/' ) . "/i", $GetNavLogo ) && !( ( $valueparse = parse_url( $GetNavLogo ) ) && isset( $valueparse[ 'host' ] ) ) ) {
      $NavLogo = $_G[ 'setting' ][ 'attachurl' ] . 'common/' . $GetNav[ 'logo' ];
    }
    $Logo = "<img src=\"$NavLogo\">";
} else {
    $Logo = '';
}

$NavItemBase = "<a href=\"$GetNav\" hidefocus=\"true\" " . ( $GetNav[ 'title' ] ? "title=\"$GetNav\" " : '' ) . ( $GetNav[ 'target' ] == 1 ? "target=\"_blank\" " : '' ) . " $GetNav>$Logo$GetNav</a>";
$NavItemExtend = "<a href=\"$GetNav\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" data-hover=\"dropdown\" onclick=\"location=href\" hidefocus=\"true\" " . ( $GetNav[ 'title' ] ? "title=\"$GetNav\" " : '' ) . ( $GetNav[ 'target' ] == 1 ? "target=\"_blank\" " : '' ) . " $GetNav>$Logo$GetNav</a>";

$SubNavItem = '';
foreach ( C::t('common_nav')->fetch_all_subnav( $GetNav[ 'id' ] ) as $GetSubNav ) {
    $SubItem = "<li><a href=\"$GetSubNav\" hidefocus=\"true\" " . ( $GetSubNav[ 'title' ] ? "title=\"$GetSubNav\" " : '' ) . ( $GetSubNav[ 'target' ] == 1 ? "target=\"_blank\" " : '' ) . SetHighLight( $GetSubNav[ 'highlight' ] ) . ">$GetSubNav</a></li>";
    $SubNavItem .= $SubItem;
}

list( $NavID ) = explode( '.', basename( $GetNav[ 'url' ] ) );
if ( $GetNav[ 'type' ] || $NavID == 'misc' || $GetNav[ 'identifier' ] == 6 ) {
    if ( $GetNav[ 'type' ] == 4 ) {
      $NavID = 'P' . $GetNav[ 'identifier' ];
    } elseif ( $GetNav[ 'type' ] == 5 ) {
      $NavID = 'F' . $GetNav[ 'identifier' ];
    } else {
      $NavID = 'N' . substr( md5( ( $GetNav[ 'url' ] != '#' ? $GetNav[ 'url' ] : $GetNav[ 'name' ] ) ), 0, 4 );
    }
}
$NavID = 'mn_' . $NavID;
if ( in_array( $NavID, $NavIDs ) ) {
    $NavID .= '_' . $GetNav[ 'identifier' ];
}
$NavIDs[] = $NavID;

if ( $mnid == $NavID ) {
    $LiTagBase = '<li id="' . $NavID . '" class="active">';
    $LiTagExtend = '<li id="' . $NavID . '" class="dropdown active">';
} else {
    $LiTagBase = '<li id="' . $NavID . '">';
    $LiTagExtend = '<li id="' . $NavID . '" class="dropdown">';
}

if ( $SubNavItem ) {
    if ( $GetNav[ 'subtype' ] ) {
      echo $LiTagBase;
      echo $NavItemBase;
    } else {
      echo $LiTagExtend;
      echo $NavItemExtend;

      echo '<ul class="dropdown-menu">';
      echo $SubNavItem;
      echo '</ul>';
    }
} else {
    echo $LiTagBase;
    echo $NavItemBase;
}
echo '</li>';
}


然后在 你想要显示菜单的地方 调用 <!--{eval include TPLDIR.'/source/include/NavBar.php';}-->
TPLDIR为模板目录 以此类推。


页: [1]
查看完整版本: Discuz 主导航菜单重写