웹마스터 팁

XE로 메뉴를 만드셔서 이용하시는 분들 대부분은 1차, 2차, 3차까지로 이용하여 만드시는데요.
이 팁은 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 으로 만드셔서 등록시켜 두고 실행 하시기 바랍니다.
태그 연관 글
  1. [2017/01/12] 묻고답하기 admin 페이지 메뉴 오류 by 쿠닌 *2
  2. [2014/06/06] 묻고답하기 메뉴를 추가했으나.. 메인페이지에서 안보이네요..ㅠㅠ by 야옹잉 *2
  3. [2011/12/20] 묻고답하기 footer menu by yestyle *1
  4. [2008/11/04] 묻고답하기 CSS menu에 대한질문 by 쿨김
  5. [2008/09/29] 웹마스터 팁 메뉴 모듈 기능 조금 추가 by 반도체맨 *23
제목 글쓴이 날짜
랭킹에 순위 넣기! ㅋ~ (꼼수;) file 다케루 2007.09.11
(파일 첨부) 파일명 안보일 때 ... 없애기 [9] Simulz 2007.09.10
메인 페이지 링크 www. 주소 표시, 로그인 링크 문제.... [5] 마덴나 2007.09.08
(게시판) 목록에 확장 변수를 출력하기 [18] file Simulz 2007.09.08
확장변수 이용해서 2차 3차 분류 항목 만들기 [3] VagaBond 2007.09.08
글이 중간에 짤릴 경우.. 송암 2007.09.06
회원에게는 구글 애드센스 보이지 않게 하기 [2] 스컬리지금어디야 2007.09.05
(설문조사) 회원만 설문 조사 하도록 [8] Simulz 2007.09.04
랜덤 배경 이미지 [7] Simulz 2007.09.04
(0.1.2) 이모티콘 삽입 후 그림 안보일 때 [5] Simulz 2007.09.02
관리자 아이디 사용제한 체크하는 어이없는 실수 & 해결 [5] refree 2007.09.01
(최근글목록) 게시판 이름 출력하기 #2 [12] file Simulz 2007.08.31
서버이전하고 마이그레이션하고 경험담 [3] 팔공산 2007.08.31
(최근글목록) 분류명 표시하기 & 이미지 [7] Simulz 2007.08.31
회원 단축 메뉴 보여주기 file Simulz 2007.08.30
구글광고넣기....(재밌는경험담 본문에 광고 넣으시려는분 꼭 읽어 보세요...) [2] kangho 2007.08.30
페이지수정 안되시는 분들께 드리는 팁 [2] 다케루 2007.08.30
분류가 있는 게시판에서 전체분류모드로 게시물 클릭시 딜레이 현상 [2] Sx3 2007.08.30
플래시메뉴 사입방법 [4] urhow1 2007.08.29
xe_layout 을 자신의 웹 첫화면과 연결 [2] justrue 2007.08.29