G5 Menu 함수 > 그누보드5 팁자료실

그누보드5 팁자료실

G5 Menu 함수 정보

G5 Menu 함수

본문

14.06.03에 올린 자료에서 함수와 사용방법이 빠져 재등록 합니다.(라고 쓰고 "사용법이 없어 추천이 없는것 같아서 누락된 함수 추가 하면서 재등록 한것" 이라고 읽는다.)



TBClass(유틸리티 클래스) = http://yobi.foxrain.me/terrorboy/terrorboy/code/master/%EC%9E%90%EC%9E%91/PHP/TBClass/TerrorBoy.class.php

ps. 해당 함수 내부에는 회원관련 메뉴가 자동으로 셋팅되도록 작업 되어있습니다.
ps2. 함수 자체가 URI기반으로 작동되기 때문에 관리자 메뉴 관리에서 도메인을 제외 하도록 작성 해주세요.


/* --------------------------------------------------------------------------- */
	// 마이메뉴
	function MyMenu() {

		global $g5, $tb, $board;

		/* ============================================= */
		/* 기본값 설정                                   */
		/* --------------------------------------------- */
		# 초기값
		$MenuData = '';
		$MenuData['depth'] = 0;
		$MenuData['data'] = array();
		$MenuData['parent'] = array();

		# 위치에 대한 서버경로
		$MenuData['path'] = $_SERVER['SCRIPT_FILENAME'];
		
		# 위치에 대한 URL FULL URL
		$MenuData['url'] = '//'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
		
		# 위치에 다한 URI
		$MenuData['uri'] = $_SERVER['REQUEST_URI'];

		# URL에서 파라미터와 파일 분리
		$MenuData['parse_url'] = parse_url($MenuData['uri']);

		# 그누보드를 폴더 설치 했을 경우를 위한 설정(2014-06-20 추가)
		# 폴더 설치 상관없이 게시판 링크라면 메뉴 설정 링크를 /bbs/board.php?bo_table=test 식으로 써주시면 됩니다.
		$SitePath = G5_URL;
		$SitePathParse = parse_url($SitePath);
		$MenuData['uri']  = str_replace($SitePathParse['path'], '', $MenuData['uri']);
		/* --------------------------------------------- */
		/* 기본값 설정                                   */
		/* ============================================= */




		/* ============================================= */
		/* 컨텐츠/게시판에 대한 주소 매칭                */
		/* --------------------------------------------- */
		# 컨텐츠의 경우 URI 값 변조하여 매칭
		if($MenuData['path'] == G5_BBS_PATH.'/content.php') {

			$MenuData['uri'] = str_replace($MenuData['parse_url']['query'], 'co_id='.$_REQUEST['co_id'], $MenuData['uri']); // 확장 파라미터를 제거 한다
		}


		# 게시판의 경우 URI 값 변조하여 매칭
		if(isset($_REQUEST['bo_table'])) {

			$MenuData['uri'] = str_replace('write.php', 'board.php', $MenuData['uri']); // 쓰기 페이지도 board로 인식 시킴
			if($board['bo_10'] == 'category_menu') { // 

				$MenuData['uri'] = str_replace($MenuData['parse_url']['query'], 'bo_table='.$_REQUEST['bo_table'].'&sca='.$_REQUEST['sca'], $MenuData['uri']); // 확장 파라미터를 제거 한다
			}
			else {
				
				$MenuData['uri'] = str_replace($MenuData['parse_url']['query'], 'bo_table='.$_REQUEST['bo_table'], $MenuData['uri']); // 확장 파라미터를 제거 한다
			}
		}
		/* --------------------------------------------- */
		/* 컨텐츠/게시판에 대한 주소 매칭                */
		/* ============================================= */




		/* ============================================= */
		/* 메뉴에 대한 정보 담기                         */
		/* --------------------------------------------- */
		# 나 자신에 대한 정보
		$MenuData['data'] = $tb->GetQuery(" select * from `{$g5['menu_table']}` where `me_link` = '{$MenuData['uri']}' order by length(`me_code`) desc ");


		# 나 자신의 DEPTH를 구함
		$MenuData['depth'] = strlen($MenuData['data']['me_code'])/2;


		# 나의 부모에 대한 정보
		if($MenuData['depth'] == 1) {
			
			$MenuData['parent'][0] = $MenuData['data'];
		}
		else if($MenuData['depth'] == 2) {

			$MenuData['parent'][0] = $tb->GetQuery(" select * from `{$g5['menu_table']}` where `me_code` = '".substr($MenuData['data']['me_code'], 0, 2)."' order by length(`me_code`) desc ");
			$MenuData['parent'][1] = $MenuData['data'];
		}
		else {

			$MenuData['parent'][0] = $tb->GetQuery(" select * from `{$g5['menu_table']}` where `me_code` = '".substr($MenuData['data']['me_code'], 0, 2)."' order by length(`me_code`) desc ");
			$MenuData['parent'][1] = $tb->GetQuery(" select * from `{$g5['menu_table']}` where `me_code` = '".substr($MenuData['data']['me_code'], 0, 4)."' order by length(`me_code`) desc ");
			$MenuData['parent'][2] = $MenuData['data'];
		}
		/* --------------------------------------------- */
		/* 메뉴에 대한 정보 담기                         */
		/* ============================================= */

		return $MenuData;
	}


/* --------------------------------------------------------------- */
	// 서브메뉴
		function SubMenu() {

			global $g5, $board, $tb, $MyMenu, $is_member;

			$order = 0;


			/* ============================================= */
			/* 기본페이지 좌측 메뉴 설정                     */
			/* --------------------------------------------- */
			# 멤버쉽
			if( $g5['title'] == "로그인" ||
				$g5['title'] == "회원가입약관" ||
				$g5['title'] == "회원 가입" ||
				$g5['title'] == "회원 정보 수정" ||
				$g5['title'] == "회원 패스워드 확인" ||
				$g5['title'] == "회원 비밀번호 확인" || $g5['title'] == "새글") {

				# 기본 타이틀 지정
				define('SUB_MENU_TITLE', '멤버십');

				if( $g5['title'] == "회원가입약관" ||
					$g5['title'] == "회원 가입") {

					define('CONTENT_TITLE', "회원가입");

					# 현제 페이지 코드를 지정한다.
					$GLOBALS['MyMenu']['parent'][1]['me_code'] = 'join';
				}
				else if($g5['title'] == "회원 정보 수정" ||
						$g5['title'] == "회원 패스워드 확인" ||
						$g5['title'] == "회원 비밀번호 확인") {

					define('CONTENT_TITLE', "회원 정보 수정");

					# 현제 페이지 코드를 지정한다.
					$GLOBALS['MyMenu']['parent'][1]['me_code'] = 'member_confirm';
				}
				else {

					define('CONTENT_TITLE', $g5['title']);
				}
			}

			if($g5['title'] == "비밀번호 입력") {

				define('SUB_MENU_TITLE', "패스워드 입력");

				if($g5['title'] = "비밀번호 입력") {

					define('CONTENT_TITLE', '패스워드 입력');
				}

				# 현제 페이지 코드를 지정한다.
				$GLOBALS['MyMenu']['parent'][1]['me_code'] = 'member_confirm';
			}

			if($g5['title'] == "회원가입이 완료되었습니다.") {

				define('SUB_MENU_TITLE', '멤버십');
				define('CONTENT_TITLE', '회원가입 완료');

				# 현제 페이지 코드를 지정한다.
				$GLOBALS['MyMenu']['parent'][1]['me_code'] = 'member_confirm';
			}
			/* --------------------------------------------- */
			/* 기본페이지 좌측 메뉴 설정                     */
			/* ============================================= */




			/* ============================================= */
			/* 연계 좌측 메뉴 설정                           */
			/* --------------------------------------------- */
			# 기본 타이틀 지정
			define('SUB_MENU_TITLE', $MyMenu['parent'][0]['me_name']);

			# 컨텐츠 타이틀 지정
			define('CONTENT_TITLE', $MyMenu['data']['me_name']);
			/* --------------------------------------------- */
			/* 연계 좌측 메뉴 설정                           */
			/* ============================================= */




			/* ============================================= */
			/* 좌측 메뉴 설정                                */
			/* --------------------------------------------- */
			# 멤버쉽 메뉴 셋팅
			if(SUB_MENU_TITLE == '멤버십') {

				if($is_member){ // 회원

					$SubMenu[$order]['me_name'] = '로그아웃';
					$SubMenu[$order]['me_link'] = G5_BBS_URL.'/logout.php';
					$SubMenu[$order]['me_code'] = 'none';
					$SubMenu[$order]['me_target'] = 'self';
					$order += 1;

					$SubMenu[$order]['me_name'] = '회원 정보 수정';
					$SubMenu[$order]['me_link'] = G5_BBS_URL.'/member_confirm.php?url=register_form.php';
					$SubMenu[$order]['me_code'] = 'member_confirm';
					$SubMenu[$order]['me_target'] = 'self';
					$order += 1;

					$SubMenu[$order]['me_name'] = '회원 탈퇴';
					$SubMenu[$order]['link'] = G5_BBS_URL.'/member_confirm.php?url=member_leave.php';
					$SubMenu[$order]['me_code'] = 'none';
					$SubMenu[$order]['me_target'] = 'self';
					$order += 1;
				}
				else { // 비회원

					$SubMenu[$order]['me_name'] = '로그인';
					$SubMenu[$order]['me_link'] = G5_BBS_URL.'/login.php';
					$SubMenu[$order]['me_code'] = 'login';
					$SubMenu[$order]['me_target'] = 'self';
					$order += 1;

					$SubMenu[$order]['me_name'] = '회원가입';
					$SubMenu[$order]['me_link'] = G5_BBS_URL.'/register.php';
					$SubMenu[$order]['me_code'] = 'join';
					$SubMenu[$order]['me_target'] = 'self';
					$order += 1;

					$SubMenu[$order]['me_name'] = '아이디/비번찾기';
					$SubMenu[$order]['me_link'] = G5_BBS_URL.'/password_lost.php" id="login_password_lost';
					$SubMenu[$order]['me_code'] = 'none';
					$SubMenu[$order]['me_target'] = 'win_password_lost';
					$order += 1;

				}
			}
			else {

				# 기본 메뉴데이터 지정
				$SubMenu = $tb->GetQuery(" select * from `{$g5['menu_table']}` where `me_use` = 1 and `me_code` like '".substr($MyMenu['data']['me_code'], 0, 2)."%' and length(`me_code`) = 4 order by `me_order`, `me_id` asc ", array("output"=>"array"));
			}
			/* --------------------------------------------- */
			/* 좌측 메뉴 설정                                */
			/* ============================================= */

			return $SubMenu;
		}







# 사용방법은 다음과 같습니다.




head.php 최상단 추가

<?php $MyMenu = MyMenu(); ?>






헤드 메뉴 출력부

			<?php
			$HeadMenu = $tb->GetQuery(" select * from {$g5['menu_table']} where `me_use` = 1 and length(me_code) = 2 order by `me_order`, `me_id` asc ", array("output"=>"array"));
			for($i=0; $i<count($HeadMenu); $i++) {
			?>
			<li<?php if($HeadMenu[$i]['me_code'] == $MyMenu['parent'][0]['me_code']) { echo " class=\"on\""; } ?>>
				<a href="<?php echo $HeadMenu[$i]['me_link']; ?>" target="_<?php echo $HeadMenu[$i]['me_target']; ?>" class="headlink"><strong><span></span><?php echo $HeadMenu[$i]['me_name']; ?></strong></a>
			</li>
			<?php } ?>






서브 메뉴 출력부

<?php $SubMenu = SubMenu(); ?>

					<?php for($i=0; $i<count($SubMenu); $i++) { ?>
                    <li<?php if($MyMenu['data']['me_code'] == $SubMenu[$i]['me_code']) { echo " class=\"on\""; } ?>><a href="<?php echo $SubMenu[$i]['me_link']; ?>"><?php echo $SubMenu[$i]['me_name']; ?><span class="bul b24"></span></a></li>
					<?php } ?>




서브메뉴 타이틀 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)

<?php echo echo SUB_MENU_TITLE; ?>




페이지 타이틀 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)

<?php echo echo CONTENT_TITLE; ?>




네비게이션  (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)<네비 링크는 요령것 알아서~>

                    <?php if($MyMenu['parent'][0]['me_name']) { ?>> <?php echo $MyMenu['parent'][0]['me_name']; ?><?php } ?>
                    <?php if($MyMenu['parent'][1]['me_name']) { ?>> <?php echo $MyMenu['parent'][1]['me_name']; ?><?php } ?>
                    <?php if($MyMenu['parent'][2]['me_name']) { ?>> <?php echo $MyMenu['parent'][2]['me_name']; ?><?php } ?>
추천
7

댓글 14개

그누보드를 폴더로 설치 하시는 분들을 위하여 내용추가 (해당 글 본문에 반영)

        # 그누보드를 폴더 설치 했을 경우를 위한 설정(2014-06-20 추가)
        # 폴더 설치 상관없이 게시판 링크라면 메뉴 설정 링크를 /bbs/board.php?bo_table=test 식으로 써주시면 됩니다.
        $SitePath = G5_URL;
        $SitePathParse = parse_url($SitePath);
        $MenuData['uri']  = str_replace($SitePathParse['path'], '', $MenuData['uri']);





추가로 저는

			if($MenuData['uri'] == '/') $MenuData['uri'] = '{{홈}}';
			$MenuData['uri'] = str_replace('/bbs', '{{bbs}}', $MenuData['uri']);


처럼 주소 치환자도 사용하고 있는데요.
이건 문제가 많이 되서 본문에서 빠져있습니다.

ps. 실제로 G5 기본 메뉴 관리는 거의 사용하지 않아 급할때 사용하기 위한 소스라 해당 부분에 대한 패치는 없을 것으로 보입니다.
저는 왜 안될까요 ?.........
common.php mymenu() 함수를 넣고... 그아래 head.php 에 넣어봣는데,, 백지화면이 ' - '!!!!!!!!!! 초보에게는 무리인가요!?
http://yobi.foxrain.me/terrorboy/terrorboy/code/master/%EC%9E%90%EC%9E%91/PHP/TBClass/TerrorBoy.class.php
 tb클래스가 없는듯 한데요.

위링크의 파일을 서버에 저장뒤 extend 폴더에 적당한 이름으로 다음과 같은 내용을 작성 하시면됩니다.

<?php
include_once(파일위치.'/TerrorBoy.class.php');
$tb = new Terrorboy();
본문에서 echo가 중복 선언 되있었네요~


서브메뉴 타이틀 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)

<?php echo SUB_MENU_TITLE; ?> 





페이지 타이틀 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)

<?php echo CONTENT_TITLE; ?> 
전체 2,427 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT