웹마스터 팁

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
제목 글쓴이 날짜
클라우드 플레어 질문있습니다. [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
숫자 아이디 허용 방법 file 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