AnimeClub - zbXE... : zeroboard XE

XpressEngine에 관련 내용에 대해서 이야기 합니다.

icon menu 무제한으로 단계(depth) 표시하기.

조회 수:3343 등록일:2009.01.29 16:24:59 (*.234.236.247)
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 으로 만드셔서 등록시켜 두고 실행 하시기 바랍니다.

profile
조회 수 :
3343
등록일 :
2009.01.29
16:24:59 (*.234.236.247)
엮인글 :
http://www.animeclub.net/zbXE/65952/01a/trackback
게시글 주소 :
http://www.animeclub.net/65952
List of Articles
번호 제목 글쓴이 날짜 조회 수
193 질문-답변 Cooliris PicLens alljoy 2014-02-19 22634
192 질문-답변 운영잔님 질문드립니다. [1] 인터넷짱 2013-06-08 20565
191 질문-답변 아래글에 이어서.. [4] secret 동쪽에태양 2013-02-24 9
190 질문-답변 piclens 을 수정 하고 싶어요 ^^ [2] secret 동쪽에태양 2013-02-17 3
189 질문-답변 로마네스크 재질문 [2] secret 인터넷짱 2013-01-22 5
188 질문-답변 piclens 1.2 요청합니다. [1] alljoy 2013-01-10 13246
187 질문-답변 로마네스크 최근글 질문입니다. [2] file 인터넷짱 2013-01-04 10187
186 질문-답변 아래글 이전글-다음글 관련 확인했는데... 고민하다가 2012-08-13 13132
185 질문-답변 이전글-다음글 관련 문의드립니다. [2] secret 고민하다가 2012-07-31 5
184 질문-답변 이전글 다음글 다시 질문드립니다. [2] 감사합니다. 2012-05-15 13037
183 질문-답변 이전글 다음글 문의드립니다, [2] 감사합니다 2012-05-09 52770
182 질문-답변 로마네스크 최근 문서 출력 위젯 [3] 종구이 2012-03-31 21021
181 질문-답변 json 추출 글 보고 문의 드립니다. [2] cosmos 2012-03-28 25432
180 질문-답변 이전글 다음글 출력에 관한문의 [2] file 봄날2 2012-03-16 22384
179 질문-답변 이전글 다음글 1.1 버튼색상요 [5] 열공365 2012-03-15 15483
178 질문-답변 흠.. 어떻게 하는거죠?? 위젯이 이상해요..; [3] file 2012-02-27 19622
177 질문-답변 이전글 다음글 위젯이요 [2] 열공365 2012-02-20 35490
176 질문-답변 게시판글을 xml로 파싱하는 방법을 부탁드립니다. [2] ibwj 2011-11-24 28902
175 질문-답변 Cooliris PicLens 애드온 1.5..... [3] secret alljoy 2011-10-30 7
174 질문-답변 위젯: 썸네일 생성에 대해서 질문있어요 [2] 아메아메몬 2011-03-25 18178



CATEGORY
ALL [601]
공지 [3]
[552]
사진 [39]
정보 [6]
소식 [2]
정보 [4]

Skin Info

slide_in
5년전 갱신
 
arrow_in