현재경로 표시 (관리자 설정 기반) 메뉴명 표시하기 질문 있습니다.

현재경로 표시 (관리자 설정 기반) 메뉴명 표시하기 질문 있습니다.

QA

현재경로 표시 (관리자 설정 기반) 메뉴명 표시하기 질문 있습니다.

본문

982489671_1650595806.0422.png

 

안녕하세요.

https://sir.kr/g5_skin/14381

이 소스를 사용하려고 수정중입니다.

해당 소스를 적용 하면 

[홈 > 현재 메뉴1Dept명 > 전체 ▼ ] 이렇게 표시되고

[전체 ▼] 에 커서를 올리면 2Dept메뉴 리스트가 아래로 뜨는 방식입니다.

 

이걸

[홈 > 현재 메뉴 1Dept명 > 현재 메뉴 2Dept명 ▼ ] 으로 바꿀 수 있을까요?

제가 지식이 짧다보니 이 소스 코드 안에서 "현재 2dept메뉴명"만 추가로 표시하려 하는데 잘 안되네요 ㅠㅠ

도움 주실 분 간절히 부탁드립니다..

 

별도로,, 현재 hover로 하위메뉴 리스트를 보여주는데,

이걸 클릭하면 나타나고, 롤아웃 되면 사라지게 수정까지 해주시면 정말 감사하겠습니다..

사실 이정도는 스크립트로 addClass 직접 처리 가능할거 같은데,

제 능력으로는 아무래도 코드가 난잡해질것 같아서요..

(이건 혹시나 요청드리는 내용입니다. 바쁘신 분은 위의 내용만 봐주셔도 너무 감사드립니다)

 

이 질문에 댓글 쓰기 :

답변 2

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;
    }
    // 메인 타임라인용 함수
    function getTimeline($bo_table, $startDate="", $endDate="") {
        global $g5;
        $startDate        = $startDate ? $startDate :date("Ymd", strtotime("-6 month"));
        $endDate        = $endDate ? $endDate : date("Ymd", strtotime("+6 month"));
        $timelineStr    = "";
        $sql            = "select * from {$g5['board_table']} where bo_table = '{$bo_table}' ";
        $board            = sql_fetch($sql);
        $tmp_write_table = $g5['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
        $sql    = " select * from {$tmp_write_table} where wr_is_comment = 0 AND (wr_1 <= '".$endDate."' OR wr_1 >= '".$startDate."')";
        $result    = sql_query($sql);
        for ($i=0; $row = sql_fetch_array($result); $i++) {
            $row['wr_1']  = date("Y-m-d", strtotime($row['wr_1']));
            $timelineStr .= "{id:".$i.", content:'".$row['wr_subject']."', start:'".$row['wr_1']."'},";
        }
        $timelineSrt = substr($timelineStr, 0, -1);
        return $timelineSrt;
    }
}
// 게시판 클래스
class Board {
    private $g5;
    private $skin_url;
    // 생성자
    function __construct($url='')
    {
        global $g5;
        $this->g5 = $g5;
        $this->skin_url = $url;
    }
}
// 유지보수 게시판 클래스
class Request extends Board {
    protected $g5;
    protected $skin_url;
    // 생성자
    function __construct($url='')
    {
        $this->skin_url = $url;
        echo $this->g5;
    }
    function setStat($stat=0)
    {
    }
    function getStatVal($stat=0)
    {
        switch($stat) {
            case 0:
                $css = 'state_rec';
                $val = "접수대기";
                break;
            case 1:
                $css = 'state_ing';
                $val = "진행중";
                break;
            case 2:
                $css = 'state_end';
                $val = "작업완료";
                break;
            case 3:
                $css = 'state_stop';
                $val = "작업보류";
                break;
            case 4:
                $css = 'state_cancel';
                $val = "작업취소";
                break;
            default:
                $css = 'state_rec';
                $val = "접수대기";
        }
        $val = "<span class='" . $css . "'>" . $val . "</span>";
        return $val;
    }
    function getLevelVal($stat=0)
    {
        switch($stat) {
            case 0:
                $img = "user_1.png";
                $val = "일반회원";
                break;
            case 1:
                $img = "user_2.png";
                $val = "계약회원";
                break;
            default:
                $img = "user_1.png";
                $val = "일반회원";
        }
        $img = "<img src='" . $this->skin_url . "/img/" . $img . "' alt='" . $val . "' />";
        $val = $img . $val;
        return $val;
    }
}
// 메뉴 클래스
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 "<div class='menu'><div class='lnb'>";
        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></div>";
    }
    // 메뉴 가져오기
    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 { // 서브메뉴
                foreach ($totalMenu as $valMenu) {
                    $me_code = trim($valMenu['me_code']); // 메뉴코드
                    if ((strlen($me_code) == 4) & (substr($me_code, 0, 2) == $code)) $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($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 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  = "<div class='sub_history'>";
        $strNav .= "<div class='wrap'>";
        $strNav .= "<ul class='hist_depth1'>";
        $strNav .= "<li><a href='/'>홈</a></li>";
        $strNav .= "<li><a href='" . $middleLink . "'>{$middleMenuTitle}</a></li>";
        // 마지막 메뉴인 경우
        if($menuLength>2) {
            $strNav .= "<li class='active'>";
            $strNav .= "<a href='#none'>{$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 .= "<li class='active'>";
            $strNav .= "<a href='#none'>전체 ▼</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>";
        }
        $strNav .= "</ul>";
        $strNav .= "</div>";
        $strNav .= "</div>";
        return $strNav;
    }
}
?>

 

그리고 퍼블리싱 코드는 아래입니다.


<!-- 메뉴 네비게이션 -->
<style>
/*네비게이션 사용 클래스*/
.sub_history_wrap { position: fixed; left: 0; top: 75px; width: 100%; height: 45px; background-color: rgba(0, 0, 0, .5); font-size: 14px; font-weight: 300; z-index: 1;}
.sub_history {width: 1170px; text-align: left; margin: 0 auto; border-left: 1px solid rgba(255, 255, 255, .15);}
.sub_history .hist_depth1 > li {display: inline-block; width: 170px; padding-left: 20px; color: #FFF;background: url("/theme/basic/img/arrow_btn.png") 100% no-repeat;background-position:left center; border-right: 1px solid rgba(255, 255, 255, .15); box-sizing: border-box; }
.sub_history .hist_depth1 > li:first-of-type { width: 60px;}
.sub_history .hist_depth1 > li:first-child {margin-left: 0;padding-left: 0;background: none;}
.sub_history .hist_depth1 > li:first-child a { text-align: center;}
.sub_history .hist_depth1 > li > a { display: inline-block; width: 100%; height: 45px; line-height: 45px; color: #FFF;}
.sub_history .hist_depth1 .active {color: #FFF;position: relative;}
.sub_history .hist_depth1 .active:hover {color: #FFF;}
.sub_history .hist_depth1 .active:hover .hist_depth2 {display: block;}
.sub_history .hist_depth2 {display:none;position: absolute;top:45px;left: 0;width: 100%;text-align: center;z-index: 99; background-color: rgba(0, 0, 0, .5);}
.sub_history .hist_depth2 li a {display: block;padding: 8px 10px;text-align: left; color: #FFF;}
.sub_history .hist_depth2 li a:hover { background-color: rgba(0, 0, 0, .5); }
.sub_history .hist_depth2 li:last-child a {border: 0;}
</style>
<div class="sub_history_wrap">
<?php if(defined('INDEX')) { // index에서만 실행 ?>
<?php // 인덱스에서 실행할 내용 ?>
<?php } else {?>
<?php //서브페이지일경우 ?>
<?php echo $_menu->viewNav(); ?>
<?php } ?> 
</div>

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 0 | RSS
QA 내용 검색
  • 개별 목록 구성 제목 답변작성자조회작성일
  • 질문이 없습니다.

회원로그인

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