웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
menu 무제한으로 단계(depth) 표시하기.
2009.01.29 16:32
XE로 메뉴를 만드셔서 이용하시는 분들 대부분은 1차, 2차, 3차까지로 이용하여 만드시는데요.
이 팁은 1차 2차 등의 매번 foreach를 수행하지 않고 무제한으로 depth 정보까지 뽑아들이는 방법 입니다.
위젯으로 제작할 생각이나 XE1.2.0에서 대폭 수정되는 것 때문에 XE1.2.0 이후 다듬어서 스킨을 포함시켜 배포할 생각을 가지고 있습니다.
혹시 필요하신 분들이 있을까봐 미리 적어봅니다.
해당 소스를 이용해서 테스트 해 보실려면 func_include 애드온을 이용 하시거나, 직접 어딘가 함수를 넣어 두신 후 사용하셔야 합니다.
위 함수를 올바르게 등록 하셨다면 아래의 실행문을 사용하시려는 layout.html 안에 추가해주세요.
foreach에서 나오는 결과문은 전부 다 나오며 거기다가 추가로 $val['depth'] 라는 값을 이용하여 자신이 몇단계의 메뉴인지 표기 하도록 해뒀습니다.
func_include 애드온을 이용하여 사용해보실 분들은 아래 class.php 파일을 등록시켜 두겠습니다.
해당 레이아웃 폴더 안에 XE/layouts/스킨명/php/class.php 으로 만드셔서 등록시켜 두고 실행 하시기 바랍니다.
이 팁은 1차 2차 등의 매번 foreach를 수행하지 않고 무제한으로 depth 정보까지 뽑아들이는 방법 입니다.
위젯으로 제작할 생각이나 XE1.2.0에서 대폭 수정되는 것 때문에 XE1.2.0 이후 다듬어서 스킨을 포함시켜 배포할 생각을 가지고 있습니다.
혹시 필요하신 분들이 있을까봐 미리 적어봅니다.
해당 소스를 이용해서 테스트 해 보실려면 func_include 애드온을 이용 하시거나, 직접 어딘가 함수를 넣어 두신 후 사용하셔야 합니다.
<?php if(!defined("__ZBXE__")) exit(); class menu_depth { function _menuList($menu_srl, $depth, $type){ if(!$menu_srl) return; $oMenuAdminModel = &getAdminModel('menu'); $menu_info = $oMenuAdminModel->getMenu($menu_srl); @include($menu_info->php_file); if($type==1) $menu->list = menu_depth::_menu1st($menu->list); $menus = menu_depth::_menu($menu->list, $depth); $GLOBALS['depth'] = false; $GLOBALS['depth_i'] = false; $GLOBALS['depth_list'] = false; return $menus; } function _menu1st($menus){ if($menus) { foreach($menus as $key => $val){ if($val['selected']==1) $value[$key] = $val; } } return $value; } function _menu($menus, $depth){ if($menus) { foreach($menus as $key => $val){ $GLOBALS['depth'][$val['node_srl']] = true; if($GLOBALS['depth'][$val['parent_srl']]) $GLOBALS['depth_i'][$val['node_srl']] = $GLOBALS['depth_i'][$val['parent_srl']]+1; else $GLOBALS['depth_i'][$val['node_srl']]=1; if($val['parent_srl']==0) $GLOBALS['depth_i'][$val['parent_srl']]=0; $value['depth'] = $GLOBALS['depth_i'][$val['parent_srl']]; $value['node_srl'] = $val['node_srl']; $value['parent_srl'] = $val['parent_srl']; $value['text'] = $val['text']; $value['href'] = $val['href'+ '+ ']; $value['url'] = $val['url']; $value['open_window'] = $val['open_window']; $value['normal_btn'] = $val['normal_btn']; $value['hover_btn'] = $val['+ 'hover_btn']; $value['active_btn'] = $val['active_btn']; $value['selected'] = $val['selected']; $value['expand'] = $val['expand']; $value['link'] = $val['link']; $GLOBALS['depth_list'][] = $value; $list = implode('',$val['list']); if(stristr($list,'array')) $depth_check = true; else $depth_check = false; if($depth_check && ($value['depth'] < $depth)) $GLOBALS['depth_list'] = menu_depth::_menu($val['list'], $depth); } } return $GLOBALS['depth_list']; } } ?>
위 함수를 올바르게 등록 하셨다면 아래의 실행문을 사용하시려는 layout.html 안에 추가해주세요.
<!-- 이건 func_include를 이용하시는 분의 경우 선언 --> <!--@if($func_check)-->{@ func_include($tpl_path.'/php/class.php') }<!--@end--> {@ // menu_depth::_menuList(메뉴번호, 제한갯수, 서브사용여부) // menu_depth::_menuList(173, 2, 1) $menu_depth = menu_depth::_menuList($main_menu->menu_srl, 100) } <ol id="lnb"> <!--@foreach($menu_depth as $key => $val)--> {@ $depth_left=0; } <!--@for($i=0;$i<$val['depth'];$i++)--> {@ $depth_left+=10; } <!--@endfor--> <ul> <li <!--@if($val['selected'])-->class="on"<!--@end--> style="margin-left:{$depth_left}px;"><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['link']}</a></li> </ul> <!--@endforeach--> </ol>
foreach에서 나오는 결과문은 전부 다 나오며 거기다가 추가로 $val['depth'] 라는 값을 이용하여 자신이 몇단계의 메뉴인지 표기 하도록 해뒀습니다.
func_include 애드온을 이용하여 사용해보실 분들은 아래 class.php 파일을 등록시켜 두겠습니다.
해당 레이아웃 폴더 안에 XE/layouts/스킨명/php/class.php 으로 만드셔서 등록시켜 두고 실행 하시기 바랍니다.
태그 연관 글
- [2017/01/12] 묻고답하기 admin 페이지 메뉴 오류 *2
- [2014/06/06] 묻고답하기 메뉴를 추가했으나.. 메인페이지에서 안보이네요..ㅠㅠ *2
- [2011/12/20] 묻고답하기 footer menu *1
- [2008/11/04] 묻고답하기 CSS menu에 대한질문
- [2008/09/29] 웹마스터 팁 메뉴 모듈 기능 조금 추가 *23
댓글 5
-
SOL군
2009.01.29 18:41
메뉴 위젯이 곧 나올꺼라서 ^^ -
만쓰별(정만)
2009.01.31 09:48
메뉴 위젯이 나온다는 말씀은;; 메뉴를 이젠 마음껏 주무를 수 있다는 말씀?
즉 위젯으로 메뉴를 넣게 된다는 말씀이신가요?
듣던중 반가운 소리네요 ...
1,2,3,4,5,6,7,8,9,10차까지 원하는 만큼 파고들수 있는 메뉴라는 말씀?
암튼..빠빨리나왔으면 합니다만; ^^ -
라르게덴
2009.01.29 22:39
컥!! 이던 ㅠㅠ
하지만 잘된일이네요 ^^ -
만쓰별(정만)
2009.01.31 09:54
그래도 라르게덴님 수고하셨어요.. 화이팅
앞으로도 이런 멋진자료들 기대해봅니다.
초보자들에게 힘이 됩니다. -
미니미
2009.02.09 23:51
메뉴가 아니더라도 응용할 곳이 많은 팁이네요.
좋습니다!
제목 | 글쓴이 | 날짜 |
---|---|---|
클라우드 플레어 질문있습니다. [2] | 생컨38889 | 2016.08.31 |
무료 폰트 모음 | boomstop | 2016.09.13 |
우분투에 apm 서버 완벽하게 설치하기 | 로니 | 2016.09.13 |
초보자분들 윈도우에 apmsetup 쓰지 마세요 느립니다. [1] | 최윤한 | 2016.09.20 |
관리자페이지 첫페이지에서 최근글 / 최근댓글 리스트에서 닉네임 대신에 날짜가 나오게 하는 방법 | sejin7940 | 2016.10.19 |
사이트 운영하시는분들 단체메일 가급적 보내지 마세요. | 최윤한 | 2016.10.19 |
내 작성글 보기에서 익명게시판에서 작성한 내 글도 보이게 하기 위해서 | sejin7940 | 2016.10.19 |
관리자페이지의 게시판 목록에서 '모듈분류'로만 검색이 안 되는 버그 수정 | sejin7940 | 2016.11.09 |
구글애드센스 한페이지에 3개 초과하시면 안됩니다. [3] | 최윤한 | 2016.11.11 |
모바일환경에서, 스케치북스킨의 경우 포인트레벨아이콘이나 닉네임이미지 가 안 나타나는 경우 수정법 | sejin7940 | 2016.11.13 |
네이버 웹마스터도구 최적화검증과 GZIP | 영흥도우럭1 | 2016.11.18 |
가상서버 고르실때 참고하시면 좋겠네요. | 로니 | 2016.11.24 |
간단한 xe 관련 자바스크립트 질문 [1] | 마든남 | 2016.12.01 |
클라우드플레어 사용시 서버 IP 노출방지 체크리스트 | gnbstory | 2016.12.09 |
숫자 아이디 허용 방법 | 410contents | 2016.12.13 |
방명록 형태 사용시 제목이 길게 저장되게 하려면 | sejin7940 | 2016.12.23 |
DOS 공격에 대한 방어 프로그램입니다. | 마루디자인 | 2017.01.23 |
jQuery 플러그인 모음 | Ansi™ | 2017.01.25 |
인스타그램 해시태그 회원가입 없이 끌어오기 | 외인 | 2017.02.08 |
jquery swiper | Ansi™ | 2017.02.16 |