기본템플릿과 코드에서 3차메뉴기능만 추가해보았습니다 > 그누보드5 스킨

그누보드5 스킨

좋은 댓글과 좋아요는 제작자에게 큰힘이 됩니다.

기본템플릿과 코드에서 3차메뉴기능만 추가해보았습니다 정보

레이아웃 기본템플릿과 코드에서 3차메뉴기능만 추가해보았습니다

첨부파일

그누보드3단메뉴.zip (30.3K) 156회 다운로드 2021-04-22 10:54:19
테스트한 버전5.4.3
호환 가능 버전all

본문

989981475_1619054627.0021.png그누보드 버전은 5.4.3입니다

 

3차메뉴 기능이 필요해서 스킨을 찾아봤는데 만족스러운 스킨을 찾기가 힘들어서(그냥 메뉴코드는 2차인데 하드 php코딩으로 3차인것처럼 보이게 한다던지..., menu테이블에 depth데이터를 따로 추가한 버전도 있었는데 먼가 엉성했습니다)

기존의 그누보드 메뉴 생성방식이 먼가 차수를 늘리기엔 불친절하게 되어있긴 하지만 그냥 오기생겨서 차수를 3차로 추가해보았습니다

원래 메뉴 코드가 1차 10 2차 1010 이런식으로 생성되는데 3차는 이런식으로 같은코드로 하려면 너무 복잡해져서 1차 100 2차 10010 3차 100101 이런식으로 붙여지는 코드 자릿수를 바꿔서 구분을 뒀습니다

4차도 1000 100 10 1 이런식으로 만들면 가능하겠지만 구조가 아주.. 그냥 차수를 유동적으로 늘릴 수 있는 메뉴관리를 새로 만드는게 더 빠르지 않을까 싶어욥

관리자 메뉴쪽 코드들이 그렇게 깔끔하지는 않습니다 허헛.. 그냥 기능 구현에만 충실하게 만들어서

 

덮어 씌울 파일

js/jquery.menu.js

adm/menu_form.php

adm/menu_list.php

adm/menu_list_update.php

 

adm/admin.css 추가할 부분

989981475_1619055265.531.png

3차메뉴는 2차메뉴보다 더 왼쪽에서 떨어져 보이기 위한 css

#menulist .two_sub_menu_class {padding-left:40px;background:url('../img/sub_menu_ico.gif') 20px 15px no-repeat}

 

 

css/default.css 추가할 부분

989981475_1619055556.8945.png

 

화면 3차메뉴 css

.gnb_2dli {position:relative;}
.gnb_2dli .bg {position:absolute;top:15px;right:8px;display:inline-block;width:10px;height:10px;overflow:hidden;background:url('../img/btn_next.gif') no-repeat 50% 50%;text-indent:-999px}

.gnb_3dul {display:none;position:absolute;top:-2px;left:138px;min-width:140px;padding-top:2px}
.gnb_3dul .gnb_3dul_box {border:1px solid #e0e2e5;border-top:0;padding:0;
-webkit-box-shadow:0px 1px 5px rgba(97, 97, 97, 0.2);
-moz-box-shadow:0px 1px 5px rgba(97, 97, 97, 0.2);
box-shadow:0px 1px 5px rgba(97, 97, 97, 0.2)}
.gnb_3da {display:block;padding:0 10px;line-height:40px;background:#fff;color:#080808;text-align:left;text-decoration:none}
a.gnb_3da:hover {color:#3a8afd;background:#f7f7f8;
-moz-transition:all 0.3s ease-out;
-o-transition:all 0.3s ease-out;
transition:all 0.3s ease-out}

 

.gnb_2dli_air .gnb_3da {}
.gnb_2dli_on .gnb_3da {}
.gnb_3da:focus, .gnb_3da:hover {color:#fff}
.gnb_2dli_over .gnb_3dul {display:block;}
.gnb_2dli_over2 .gnb_3dul {display:block;right:0}

 

전체메뉴 css

#gnb_all .gnb_al_li li>ul>li {line-height:1.5em;font-size:0.8em;}
#gnb_all .gnb_al_li li>ul>li a {color:#777}

 

lib/get_data.lib.php 추가할 부분

989981475_1619056363.6844.png

php함수들 중에서 get_menu_db 함수에 3차메뉴를 배열에 넣는 부분만 추가하면 됩니다

function get_menu_db($use_mobile=0, $is_cache=false){
    global $g5;

    static $cache = array();
    
    $cache = run_replace('get_menu_db_cache', $cache, $use_mobile, $is_cache);
    
    $key = md5($use_mobile);

    if( $is_cache && isset($cache[$key]) ){
        return $cache[$key];
    }
    
    $where = $use_mobile ? "me_mobile_use = '1'" : "me_use = '1'";

    if( !($cache[$key] = run_replace('get_menu_db', array(), $use_mobile)) ){
        $sql = " select *
                    from {$g5['menu_table']}
                    where $where
                      and length(me_code) = '3'
                    order by me_order, me_id ";
        $result = sql_query($sql, false);

        for ($i=0; $row=sql_fetch_array($result); $i++) {
            
            $row['ori_me_link'] = $row['me_link'];
            $row['me_link'] = short_url_clean($row['me_link']);
            $cache[$key][$i] = $row;

            $sql2 = " select *
                        from {$g5['menu_table']}
                        where $where
                          and length(me_code) = '5'
                          and substring(me_code, 1, 3) = '{$row['me_code']}'
                        order by me_order, me_id ";
            $result2 = sql_query($sql2);
            for ($k=0; $row2=sql_fetch_array($result2); $k++) {
                $row2['ori_me_link'] = $row2['me_link'];
                $row2['me_link'] = short_url_clean($row2['me_link']);
                $cache[$key][$i]['sub'][$k] = $row2;
                
                $sql3 = " select *
                        from {$g5['menu_table']}
                        where $where
                          and length(me_code) = '6'
                          and substring(me_code, 1, 3) = '{$row['me_code']}'                          
                          and substring(me_code, 1, 5) = '{$row2['me_code']}'
                        order by me_order, me_id ";
                $result3 = sql_query($sql3);
                for ($j=0; $row3=sql_fetch_array($result3); $j++) {
                    $row3['ori_me_link'] = $row3['me_link'];
                    $row3['me_link'] = short_url_clean($row3['me_link']);
                    $cache[$key][$i]['sub'][$k]['sub'][$j] = $row3;
                }
            }
        }
    }

    return $cache[$key];
}

 

head.php 추가할 부분

989981475_1619055651.0538.png

3차메뉴가 뜨기위한 php 코드

기존 <li><a></a></li>로 끝나던 2차메뉴 태그 안에

<li><a></a>(3차메뉴 php코드)</li>이런식으로 넣어주면 됩니다

<?php 
                            $j = 0;
                            foreach( (array) $row2['sub'] as $row3 ){
                                    
                                if( empty($row3) ) {
                                    continue; 
                                }
        
                                if($j == 0)
                                    echo '<span class="bg">하위분류</span><div class="gnb_3dul"><ul class="gnb_3dul_box">'.PHP_EOL;
                                ?>
                                        <li class="gnb_3dli"><a href="<?php echo $row3['me_link']; ?>" target="_<?php echo $row3['me_target']; ?>" class="gnb_3da"><?php echo $row3['me_name'] ?></a></li>
                                <?php
                                    $j++;
                            }   //end foreach $row3
                            
                            if($j > 0)
                                echo '</ul>'.PHP_EOL;
                            ?>

 

전체메뉴도 동일

클래스만 제외되었습니다

989981475_1619055859.518.png

<?php 
                            $j = 0;
                            foreach( (array) $row2['sub'] as $row3 ){
                                    
                                if( empty($row3) ) {
                                    continue; 
                                }
        
                                if($j == 0)
                                    echo '<ul>'.PHP_EOL;
                                ?>
                                        <li><a href="<?php echo $row3['me_link']; ?>" target="_<?php echo $row3['me_target']; ?>"><?php echo $row3['me_name'] ?></a></li>
                                <?php
                                    $j++;
                            }   //end foreach $row3
                            
                            if($j > 0)
                                echo '</ul>'.PHP_EOL;
                            ?>

 

데이터 베이스는 변동사항 없습니다

989981475_1619055924.8266.png

추천
15

댓글 전체

전체 2,423 |RSS
그누보드5 스킨 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT