드롭다운 메뉴 네비게이션 문의
관련링크
본문
와싸네 메뉴네비게이션
https://sir.kr/g5_skin/14381?page=2
위 스킨(?)을 사용하고자 합니다.
원본은 가장 하위 차수만 드롭다운이 되는데요,
저는 1차수도 드롭다운이 되도록 하고 싶어요.
코드를 이래저래 보다가 우찌우찌 1차수가 나오도록 했는데요,
문제는 2차 메뉴가 1번일 경우만 드롭다운이 되고, 2 이상일 때는 공백으로 나옵니다.. 크흑..
// 네비게이션 문구 출력 (예: 홈 > 고객센터 > 공지사항)
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
혹시 해결 되셨ㄴㅏ요?? ㅜㅠ
혹시 해결 되셨ㄴㅏ요?? ㅜㅠ
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;}