웹마스터 팁
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.31 09:54
그래도 라르게덴님 수고하셨어요.. 화이팅
앞으로도 이런 멋진자료들 기대해봅니다.
초보자들에게 힘이 됩니다. -
메뉴가 아니더라도 응용할 곳이 많은 팁이네요.
좋습니다!
| 제목 | 글쓴이 | 날짜 |
|---|---|---|
| 업그레이드 후 아이콘 혹은 이미지 깨짐현상 발생시 [2] | 플로리다 | 2008.12.31 |
| .htaccess 파일을 쉽게 만드는 방법 [5] | 김병화999 | 2009.01.01 |
| 확장 컴포넌트 출력 아이콘 표시 | o앙마o | 2009.01.02 |
| 사진 첨부 등록 시 화일 사라짐 [2] | 정욱재 | 2009.01.03 |
| XE 업그레이드후 모듈 업데이트 안되고, 모듈 생성시 이미 존재하는 모듈이라고 나올때 | 또나아빠 | 2009.01.05 |
| 전화번호 형식의 확장변수를 목록에 출력하고 싶을 때 | serendip | 2009.01.06 |
| XE 초기설치시 error 500 이 나오며 설치가 안될때 [1] | sangjaezzi | 2009.01.09 |
| 알ftp, editplus 계정정보 파일 백업 | yjnet | 2009.01.10 |
| 제로보드XE 쉽게 업데이트 하는 방법.. [13] | 청개구리00 | 2009.01.12 |
| 쪽지보내기에 대하여 문의 [1] | 도봉산사랑 | 2009.01.22 |
|
계시글 제목이 짤려서 나오는데 어디를 수정해야 할까요...
[2]
| 지우빠 | 2009.01.20 |
| 1.1.5 이후 버전 업데이트후 외부페이지에서 다음위젯이 표시안될때~ [3] | 정박사닷컴 | 2009.01.23 |
|
공식레이아웃에 언어선택 부분 빼는 방법 아주 간단합니다.
[1]
| 만쓰별(정만) | 2009.01.23 |
| 전체글 보기 게시판 만들어보기 관련 연구 응용 링크 모음 [5] | 만쓰별(정만) | 2009.01.23 |
| 회원을 그룹으로 나누어 화면에 출력할 수 있나요? | 아키수 | 2009.01.24 |
| XpressEngine 초보자를 위해서! [1] | 바라기군 | 2009.01.25 |
| 매일 매일 업데이트 되는 사이트 내용부분만 아이프레임으로 긁어오기... [1] | 만쓰별(정만) | 2009.01.25 |
|
pdf 파일 embeded in XE 게시판
[4]
| 자반튀김 | 2009.01.27 |
| XE1.1.5로 업후 기존변형위젯들이 문제를 일으킬때 수정방법 [1] | 팔공산 | 2009.01.28 |
|
menu 무제한으로 단계(depth) 표시하기.
[5]
| 라르게덴 | 2009.01.29 |