드롭다운 메뉴 네비게이션 문의

드롭다운 메뉴 네비게이션 문의

QA

드롭다운 메뉴 네비게이션 문의

본문

와싸네 메뉴네비게이션

https://sir.kr/g5_skin/14381?page=2

 

위 스킨(?)을 사용하고자 합니다.

원본은 가장 하위 차수만 드롭다운이 되는데요,

 

03ed958935476063ad6db23480a1ba3f_1496890630_6346.jpg

 

 

저는 1차수도 드롭다운이 되도록 하고 싶어요.

코드를 이래저래 보다가 우찌우찌 1차수가 나오도록 했는데요,

 

03ed958935476063ad6db23480a1ba3f_1496890656_037.jpg
 


문제는 2차 메뉴가 1번일 경우만 드롭다운이 되고, 2 이상일 때는 공백으로 나옵니다.. 크흑.. 

 

03ed958935476063ad6db23480a1ba3f_1496890665_9363.jpg
 

 


    // 네비게이션 문구 출력 (예: 홈 > 고객센터 > 공지사항)
    function viewNav()
    {
 
        $pageType = $this->getPageType($_SERVER['SCRIPT_NAME']);
 
        $me_code = $this->getMenuCode();
        if(!$me_code) $me_code = "10";
 
        $firstMenuCode = substr($me_code, 1, 2); // 1차메뉴 코드 // 이미나라 추가
        $firstMenu = $this->getMenu($firstMenuCode); // 1차메뉴 배열 // 이미나라 추가
        $firstMenuTitle = $this->getMenuTitle($firstMenuCode); // 1차메뉴 이름 // 이미나라 추가
 
        $middleMenuCode = substr($me_code, 0, 2); // 1차메뉴 코드
        $middleMenu = $this->getMenu($middleMenuCode); // 1차메뉴 배열
        $middleMenuTitle = $this->getMenuTitle($middleMenuCode); // 1차메뉴 이름
        $curMenu    = $this->getMenu($me_code[0]); // 현재메뉴 배열
        $curMenuTitle = $this->getMenuTitle($me_code); // 현재메뉴 이름
        $menuLength = strlen($me_code);
 
        $middleLink = $this->getMenuLink($middleMenuCode);
 
        $strNav .= "<ul id='lnb'>";
        $strNav .= "<li class='home'><a href='../'>홈</a></li>";
        $strNav .= "<li class='lnb_1dli active'>";
        $strNav .= "<a href='" . $middleLink . "' class='lnb_1da active'>1차{$middleMenuTitle}</a>";
            $strNav .= "<ul class='lnb_2dul'>";
            for($i=0; $i<count($firstMenu); $i++) { // 이미나라 추가
                $strNav .= "<li class='lnb_2dli'><a href='" . $firstMenu[$i]['me_link'] . "' class='lnb_2da'>{$firstMenu[$i]['me_name']}</a></li>"; // 이미나라 추가
            }
            $strNav .= "</ul>"; // 이미나라 추가
            $strNav .= "</li>";
 
        // 마지막 메뉴인 경우
        if($menuLength>2) {
            $strNav .= "<li class='lnb_1dli active'>";
            $strNav .= "<a href='#none' class='lnb_2da'><strong>2차{$curMenuTitle}</strong></a>";
            $strNav .= "<ul class='lnb_2dul'>";
            for($i=0; $i<count($middleMenu); $i++) {
                $strNav .= "<li><a href='" . $middleMenu[$i]['me_link'] . "' class='lnb_2da'>{$middleMenu[$i]['me_name']}</a></li>";
            }
            $strNav .= "</ul>";
            $strNav .= "</li>";
		//처음 메뉴일 경우
        } else if ($menuLength == 2) {
            $strNav .= "<li class='lnb_1dli active'>";
            $strNav .= "<a href='#none' class='lnb_2da'><strong>2차{$curMenuTitle}</strong></a>";
            $strNav .= "<ul class='lnb_2dul'>";
            for($i=0; $i<count($middleMenu); $i++) {
                $strNav .= "<li><a href='" . $middleMenu[$i]['me_link'] . "' class='lnb_2da'>{$middleMenu[$i]['me_name']}</a></li>";
            }
            $strNav .= "</ul>";
            $strNav .= "</li>";
        }
        $strNav .= "</ul>";
 
        return $strNav;
 
    }

 

코드에서  // 이미나라 추가 라고 되어있는 부분이 제가 추가한 코드에요..

서당개 풍월 읊는 수준이라.....;;

뭐가 문제일 거라는 대략적인 감은 오는데 이게 해결이 가능할까요?;;

 

 

이 질문에 댓글 쓰기 :

답변 4

혹시 해결 되셨ㄴㅏ요?? ㅜㅠ 

네.. 몇해전 일이라 어찌했는지 기억은 안 나지만;; 아무튼 해당 소스를 지금까지도 종종 쓰고 있어요^^;
윗쪽에 제가 쓰는 코드를 css랑 같이 올려뒀으니 필요하다면 참고해보셔요.

extend > cn.extend.php

 


<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
// 2017.05.17 추가 from lux
// Ver. 0.0.2
$_cn = new MyClass($member['mb_id']); // 기본객체 생성
$_menu = new Menu(); // 메뉴객체 생성
// 기본 클래스
class MyClass {
    private $g5;
    private $userid;
    // 생성자
    function __construct($mb_id='')
    {
        $this->userid = $mb_id;
    }
    function privacy($str, $len=1)
    {
        $charset = mb_detect_encoding($str); // charset 검사
        $str = trim(strip_tags($str)); // 태그 및 공백 제거
        $str = mb_substr($str, 0, $len, $charset); // $len 만큼만 가져오기
        $str = $str . "**";
        return $str;
    }
}
// 게시판 클래스
class Board {
    private $g5;
    private $skin_url;
    // 생성자
    function __construct($url='')
    {
        global $g5;
        $this->g5 = $g5;
        $this->skin_url = $url;
    }
}

// 메뉴 클래스
class Menu {
    public $menu;
    // 생성자
    function Menu()
    {
        $this->setMenu();
    }
    // 메뉴 배열로 세팅하기
    function setMenu()
    {
        global $g5;
        $order = "order by me_order, me_id";
        $query = "select * from {$g5['menu_table']}  where me_use = '1' $order";
        $result = sql_query($query, false);
        while($row=sql_fetch_array($result)) {
            $menu[] = $row; // 배열에 메뉴 저장
        };
        $this->menu = $menu;
    }
    // 메뉴 출력하기
    function viewMenu()
    {
        $menu = $this->getMenu(1); // 1차메뉴 가져오기
        for($i=0, $strMenu1='', $strMenu2='', $menucode='', $menulength=2; $i < count($menu); $i++) {
            $menucode =  $menu[$i]['me_code'];
            $menulength = strlen($menucode);
            $strMenu1 .= "<li><a href=" . $menu[$i]['me_link'] . " target=_{$menu[$i]['me_target']}>{$menu[$i]['me_name']}</a></li>";
            $strMenu2 .= "<li><ul>";
            $arrMenu = $this->getMenu($menucode);
            if($arrMenu) {
                foreach ($arrMenu as $submenu) { // 2차메뉴
                    $strMenu2 .= "<li><a href=" . $submenu['me_link'] . " target=_{$submenu['me_target']}>{$submenu['me_name']}</a></li>";
                }
            }
            $strMenu2 .= "</ul></li>";
        }
        echo "<link rel='stylesheet' href='".G5_URL."/extend/menu.extend.css'>"; // 메뉴 CSS가져오기
        echo "<link rel='stylesheet' href='".G5_URL."/extend/menu_responsive.extend.css'>"; // 메뉴반응형 CSS가져오기
        echo "<nav id=\"lnb\"><div class=\"container\">";
        echo "<div class='wrap'><ul class='lnb_depth1'>$strMenu1</ul></div>"; // 1차메뉴 출력
        echo "<div class='lnb_depth2'><div class='wrap'><ul>$strMenu2</ul></div></div>"; // 2차메뉴 출력
        echo "</div></nav>";
    }
    // 메뉴 가져오기
    function getMenu($code='')
    {
        $totalMenu = $this->menu;
        if($code=='') return $totalMenu; // 인덱스가 없을 경우 전체메뉴 반환
        if($totalMenu) {
            if ($code == 1) { // 1차메뉴
                foreach ($totalMenu as $valMenu) {
                    $me_code = trim($valMenu['me_code']); // 메뉴코드
                    if (strlen($me_code) == 2) $menu[] = $valMenu;
                }
            } else { // 서브메뉴
//                print_r($totalMenu);
                foreach ($totalMenu as $valMenu) {
                    $me_code = trim($valMenu['me_code']); // 메뉴코드
                    if ((strlen($me_code) == 4) & (substr($me_code, 0, 2) == $code) & strlen($code) == 2) $menu[] = $valMenu;
                    if ((strlen($me_code) == 6) & (substr($me_code, 0, 4) == $code) & strlen($code) == 4) $menu[] = $valMenu;
                }
            }
        }
        return $menu;
    }
    // 메뉴 코드 가져오기
    function getMenuCode($str='')
    {
        global $g5;
        if(!$str) $str = explode("&", $_SERVER['QUERY_STRING'] );
        $token = ''; //토큰 초기화
        foreach($str as $val)
        {
            if(substr($val, 0, 8) == "bo_table") $token = $val;
            if(substr($val, 0, 5) == "co_id") $token = $val;
            if(substr($val, 0, 5) == "ca_id") $token = $val;
            if(substr($val, 0, 5) == "it_id") $token = $val;
            if(substr($val, 0, 3) == "sca") $token = $val;
        }
        // 메뉴링크에서 일치하는 토큰이 있는지 검사
        if($token) { // 토큰이 있는 경우
            $query = "select * from {$g5['menu_table']} where me_link like '%{$token}%'";
            $result = sql_query($query);
            while ($row = sql_fetch_array($result)) {
                $me_code = $row['me_code'];
                $me_link = $row['me_link'];
                $tmp_str = @explode("&", strstr($me_link, $token)); // token을 포함한 경우
                if(is_array($tmp_str)) {
                    foreach ($tmp_str as $tmp_val) {
                        if ($token == $tmp_val) {
                            $code = $me_code;
                        } else {
                            continue;
                        }
                    }
                }
            }
        }
        return $code;
    }
    function getMenuTitle($idx=10)
    {
        global $g5;
        $query = "select me_name from {$g5['menu_table']} where me_code='$idx'";
        $row = sql_fetch($query);
        return $row['me_name'];
    }
    function getMenuLink($idx=10)
    {
        global $g5;
        $query = "select me_link from {$g5['menu_table']} where me_code='$idx'";
        $row = sql_fetch($query);
        return $row['me_link'];
    }
    function getPageType($str='')
    {
        if(!$str) $str = $_SERVER['QUERY_STRING']; // URI가 없을 경우 현재 페이지 URI
        if(preg_match("/board.php/", $str)) return "bbs"; // 게시판
        else if(preg_match("/write.php/", $str)) return "bbs"; // 게시판
        else if(preg_match("/content.php/", $str)) return "content"; // 콘텐츠
        else if(preg_match("/list.php/", $str)) return "list"; // 상품리스트
        else if(preg_match("/item.php/", $str)) return "item"; // 상품상세페이지
        else if(preg_match("/login.php/", $str)) return "login"; // 로그인페이지
        else if(preg_match("/mypage.php/", $str)) return "mypage"; // 마이페이지
        else if(preg_match("/register.php/", $str)) return "register"; // 회원가입
        else if(preg_match("/faq.php/", $str)) return "bbs"; // 회원가입
        else return "etc"; // 기타
    }
    // 네비게이션 문구 출력 (예: 홈 > 고객센터 > 공지사항)
    function viewNav()
    {
        $pageType = $this->getPageType($_SERVER['SCRIPT_NAME']);
        $me_code = $this->getMenuCode();
        if(!$me_code) $me_code = "10";
        $middleMenuCode = substr($me_code, 0, 2); // 1차메뉴 코드
        $middleMenu = $this->getMenu($middleMenuCode); // 1차메뉴 배열
        $middleMenuTitle = $this->getMenuTitle($middleMenuCode); // 1차메뉴 이름
        $curMenu    = $this->getMenu($me_code[0]); // 현재메뉴 배열
        $curMenuTitle = $this->getMenuTitle($me_code); // 현재메뉴 이름
        $menuLength = strlen($me_code);
        $middleLink = $this->getMenuLink($middleMenuCode);
        switch($pageType) {
            case "login" :
                $middleMenuTitle = "로그인";
                $middleLink = '';
                $menuLength = 1;
                break;
            case "mypage" :
                $middleMenuTitle = "마이페이지";
                $middleLink = '';
                $menuLength = 1;
                break;
            case "register" :
                $middleMenuTitle = "회원가입";
                $middleLink = '';
                $menuLength = 1;
                break;
            case "etc" :
                $middleMenuTitle = "기타";
                $middleLink = '';
                $menuLength = 1;
                break;
        }
        $strNav .= "<nav id=\"lnb\"><div class=\"container\"><ul>";
        $strNav .= "<li class='home'><a href='../' class='home'>홈</a></li>";
        $strNav .= "<li><a href='" . $middleLink . "' class='mid'>{$middleMenuTitle}</a></li>";
        // 마지막 메뉴인 경우
        if($menuLength>2) {
            $strNav .= "<li class='active'>";
            $strNav .= "<a href='#none' class='now'>{$curMenuTitle}</a>";
            $strNav .= "<ul class='hist_depth2'>";
            for($i=0; $i<count($middleMenu); $i++) {
                $strNav .= "<li><a href='" . $middleMenu[$i]['me_link'] . "'>{$middleMenu[$i]['me_name']}</a></li>";
            }
            $strNav .= "</ul>";
            $strNav .= "</li>";
        } else if ($menuLength == 2) {
            //처음 메뉴일 경우
            $strNav .= "";
        }
        $strNav .= "</ul></nav>";
        return $strNav;
    }
    // 네비게이션 문구 출력 (예: 홈 > 고객센터 > 공지사항)
    function viewNav2()
    {
        $pageType = $this->getPageType($_SERVER['SCRIPT_NAME']);
        $me_code = $this->getMenuCode();
        if(!$me_code) $me_code = "10";
        $middleMenuCode = substr($me_code, 0, 2); // 1차메뉴 코드
        $strNav .= "<nav id=\"lnb\" class=\"lnb_{$middleMenuCode}\"><ul class=\"lnb_1dul\">";
        $strNav .= "<li class=\"home\"><a href=\"../\"><span class=\"sound_only\">홈</span></a></li>";
        if ($menuLength == 1) {
            $strNav .= "<li class=\"mid\"><a href='" . $middleLink . "'>{$middleMenuTitle}</a></li>";
        } else {
            $tmpMenuCode = $me_code;
            $tmpCode = '';
            while ($tmpMenuCode) {
                $tmpCode .= substr($tmpMenuCode, 0, 2);
                if (substr($tmpCode, 0, -2)) {
                    $nowMenu = $this->getMenu(substr($tmpCode, 0, -2)); // 1차메뉴 배열
                } else {
                    $nowMenu = $this->getMenu('1'); // 1차메뉴 배열
                };
                $nowTitle = $this->getMenuTitle($tmpCode); // 현재메뉴 이름
                $strNav .= "<li class=\"lnb_1dli\">";
                $strNav .= "<a href=\"javascript:()\" class=\"lnb_1da\">{$nowTitle}</a>";
                $strNav .= "<ul class=\"lnb_2dul\">";
                for($i=0; $i<count($nowMenu); $i++) {
                    $strNav .= "<li><a href='" . $nowMenu[$i]['me_link'] . "'>{$nowMenu[$i]['me_name']}</a></li>";
                }
                $strNav .= "</ul>";
                $strNav .= "</li>";
                $tmpMenuCode = substr($tmpMenuCode, 2, strlen($tmpMenuCode));
            };
        };
        $strNav .= "</ul></nav>";
        return $strNav;
    }
}
?>

css

 


#aside {position:relative;background:#1079b3;z-index:10 !important;}
#lnb {position:relative;height:70px;z-index:10;}
    #lnb ul.lnb_1dul {display:table;position:relative;width:calc(100% - 50px);height:100%;margin-left:50px;}
    #lnb li.lnb_1dli {display:table-cell;position:relative;width:33.33%;height:100%;border-right:1px solid rgba(255,255,255,.5);}
    #lnb li.home {position:absolute;left:0;top:15px;margin-left:-50px;}
    #lnb li.home a {display:inline-block;width:40px;height:40px;border-radius:3px;line-height:45px;text-align:center;background:#fff;}
    #lnb li.home a::after {content:"\f015";font-family:"FontAwesome";font-size:1.3em;color:#1079b3;}
    #lnb a {display:block;font-family:'S-CoreDream-4Regular','NanumGothic','NanumG','나눔고딕','돋움';color:#fff;line-height:70px;transition:all .2s;}
    #lnb a.lnb_1da {display:block;position:relative;padding:0 50px 0 30px;font-size:1.2em;color:rgba(255,255,255,.8);text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;overflow:hidden;}
    #lnb a.lnb_1da:after {position:absolute;top:0;right:20px;content:"\f13a";font-family:"FontAwesome";font-size:1.1em;color:#fd0;line-height:70px;}
    #lnb li.lnb_1dli:hover a.lnb_1da, #lnb a.lnb_1da:hover {color:rgba(255,255,255,1);}
    #lnb li.lnb_1dli:last-child a.lnb_1da {font-family:'S-CoreDream-5Medium','NanumGothic','NanumG','나눔고딕','돋움';color:rgba(255,255,255,1);background:rgba(0,0,0,.3);}
    #lnb li.lnb_1dli:last-child a.lnb_1da:hover, #lnb li.lnb_1dli:last-child:hover a.lnb_1da {background:rgba(0,0,0,.5);}
    #lnb li.lnb_1dli:last-child a.lnb_1da:hover:after {color:#fff;}
    #lnb .lnb_2dul {display:none;position:absolute;top:70px;left:0;right:0;border:1px solid #3c3c3c;border-top:none;text-align:left;z-index:99;}
    #lnb .lnb_1dli:hover .lnb_2dul {display:block;}
    #lnb .lnb_2dul li a {padding:0 10px 0 22px;border-top:1px solid #efefef;color:#000;line-height:45px;background:#fff;}
    #lnb .lnb_2dul li a:hover, #lnb .lnb_2dul li a.hover {color:#fff;background:#1c1c1c;}
    #lnb.lnb_10 ul.lnb_1dul, #lnb.lnb_10 li.lnb_1dli,
    #lnb.lnb_60 ul.lnb_1dul, #lnb.lnb_60 li.lnb_1dli,
    #lnb.lnb_70 ul.lnb_1dul, #lnb.lnb_70 li.lnb_1dli,
    #lnb.lnb_50 ul.lnb_1dul, #lnb.lnb_50 li.lnb_1dli {display:inline-block;}
답변을 작성하시기 전에 로그인 해주세요.
전체 27
QA 내용 검색

회원로그인

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