Skip to content
On this page

그누보드 5.4 메뉴 active 주기

그누보드 5.4 에서는 짧은 주소가 적용 되면 active 방식이 백단에서 하기가 좀 어렵다..

결론은 자바스크립트로 해결 해야된다.

js
$('#gnb_1dul .gnb_1dli a').each(function (ele,val) {
    if($(val).attr('href') === decodeURIComponent(window.location.href)) {
        $(this).parent().addClass('active');
    }
});

디코더 유알엘 컴포넌트 함수를 적용하는 이유는 브라우저 주소에서는 인코딩이 된상태로 나와서 액티브 클래스를 적용이 안되는 부분이 있다

혹시나 짧은 주소 적용 안하고 할때는 아래처럼 백단에서 하면 된다.

php
<ul id="gnb_1dul">
<?php
$sql = " select *
    from {$g5['menu_table']}
    where me_use = '1'
      and length(me_code) = '2'
    order by me_order, me_id ";
$result = sql_query($sql, false);
$gnb_zindex = 999; // gnb_1dli z-index 값 설정용
$menu_datas = array();
for ($i=0; $row=sql_fetch_array($result); $i++) {
    $menu_datas[$i] = $row;

    $sql2 = " select *
        from {$g5['menu_table']}
        where me_use = '1'
          and length(me_code) = '4'
          and substring(me_code, 1, 2) = '{$row['me_code']}'
        order by me_order, me_id ";
    $result2 = sql_query($sql2);
    for ($k=0; $row2=sql_fetch_array($result2); $k++) {
        $menu_datas[$i]['sub'][$k] = $row2;
    }

    if($i == 2) {
        $sql3 = " select it_id from {$g5['g5_shop_item_table']} where it_id like '%{$it_id}'";
        $result3 = sql_query($sql3);
        for ($j=0; $row3=sql_fetch_array($result3); $j++) {
            $menu_datas[$i]['shop'][$j] = $row3;
        }
    }
}

$i = 0;
foreach($menu_datas as $key=> $row){
    if(empty($row)) continue;
    $active = '';
    if($it_id) {
        if($row['shop'][0]['it_id'] == $it_id)  {
            $active = ' active';
        }
    }else
    if($bo_table) {
        if(strpos($row['me_link'], 'bo_table='.$bo_table) !== false) {
            $active = ' active';
        }
    } else
    if(strpos($row['me_link'], $_SERVER['PHP_SELF']) !== false) {
        $active = ' active';
    }
    ?>
<li class="gnb_1dli <?php echo $active; ?> ">
    <a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="gnb_1da"><?php echo $row['me_name'] ?></a>
    <?php
    $k = 0;
    foreach( (array) $row['sub'] as $row2 ){

        if( empty($row2) ) continue;

        if($k == 0)
            echo '<span class="bg">하위분류</span><ul class="gnb_2dul">'.PHP_EOL;
        ?>
        <li class="gnb_2dli"><a href="<?php echo $row2['me_link']; ?>" target="_<?php echo $row2['me_target']; ?>" class="gnb_2da"><?php echo $row2['me_name'] ?></a></li>
        <?php
        $k++;
    }   //end foreach $row2

    if($k > 0)
        echo '</ul>'.PHP_EOL;
    ?>
    </li>
    <?php
    $i++;
}   //end foreach $row

if ($i == 0) {  ?>
    <li class="gnb_empty">메뉴 준비 중입니다.<?php if ($is_admin) { ?> <a href="<?php echo G5_ADMIN_URL; ?>/menu_list.php">관리자모드 &gt; 환경설정 &gt; 메뉴설정</a>에서 설정하실 수 있습니다.<?php } ?></li>
<?php } ?>
</ul>