T

G5 Menu 함수

· 2014-06-19 (목) 22:08:47 · 13611 · 14
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기반으로 작동되기 때문에 관리자 메뉴 관리에서 도메인을 제외 하도록 작성 해주세요.

[code]
/* --------------------------------------------------------------------------- */
// 마이메뉴
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;
}
[/code]






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




head.php 최상단 추가
[code]
<?php $MyMenu = MyMenu(); ?>
[/code]





헤드 메뉴 출력부
[code]
<?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 } ?>
[/code]





서브 메뉴 출력부
[code]
<?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 } ?>
[/code]



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



페이지 타이틀 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)
[code]
<?php echo echo CONTENT_TITLE; ?>
[/code]



네비게이션 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)<네비 링크는 요령것 알아서~>
[code]
<?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 } ?>
[/code]
|

댓글 14개

역시...짝짝짝...
추천드립니다.
감사합니다
그누보드를 폴더로 설치 하시는 분들을 위하여 내용추가 (해당 글 본문에 반영)
[code]
# 그누보드를 폴더 설치 했을 경우를 위한 설정(2014-06-20 추가)
# 폴더 설치 상관없이 게시판 링크라면 메뉴 설정 링크를 /bbs/board.php?bo_table=test 식으로 써주시면 됩니다.
$SitePath = G5_URL;
$SitePathParse = parse_url($SitePath);
$MenuData['uri'] = str_replace($SitePathParse['path'], '', $MenuData['uri']);
[/code]




추가로 저는
[code]
if($MenuData['uri'] == '/') $MenuData['uri'] = '{{홈}}';
$MenuData['uri'] = str_replace('/bbs', '{{bbs}}', $MenuData['uri']);
[/code]

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

ps. 실제로 G5 기본 메뉴 관리는 거의 사용하지 않아 급할때 사용하기 위한 소스라 해당 부분에 대한 패치는 없을 것으로 보입니다.
감사합니다
^^
2014-07-07 (월) 17:30:13
무림 고수 테러님 이건 어떤 소스인가요!??
g5의 메뉴를 보다 쉽게 사이트에서 표현하기위한 함수입니다
2014-07-08 (화) 11:07:44
아...................하..................넵 !!!!!!!!!!!!!!!!! 사용해봐야지이이이이이이이이이
2014-07-08 (화) 23:54:50
저는 왜 안될까요 ?.........
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 폴더에 적당한 이름으로 다음과 같은 내용을 작성 하시면됩니다.
[code]
<?php
include_once(파일위치.'/TerrorBoy.class.php');
$tb = new Terrorboy();
[/code]
본문에서 echo가 중복 선언 되있었네요~


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




페이지 타이틀 (<?php $SubMenu = SubMenu(); ?> 호출 다음 사용가능)
[code]
<?php echo CONTENT_TITLE; ?>
[/code]
노고에 감사드립니다ㅠㅠ
^^
2015-06-05 (금) 02:47:13
고맙습니다..
댓글을 작성하시려면 로그인이 필요합니다.

그누보드5 팁자료실

2,788건
+
제목 글쓴이 날짜 조회
14-07-14 조회 1.1만
14-07-14 조회 1.1만
14-07-11 조회 1.3만
14-07-09 조회 1.6만
14-07-09 조회 9,533
14-07-08 조회 1.2만
14-07-04 조회 7,238
14-07-02 조회 9,605
14-06-25 조회 1.2만
14-06-24 조회 1.1만
14-06-19 조회 1.1만
14-06-21 조회 7,982
14-06-21 조회 3만
14-06-19 조회 1.4만
14-06-18 조회 9,162
14-06-09 조회 1.1만
14-06-08 조회 8,362
14-06-07 조회 1.5만
14-06-07 조회 2.1만
14-06-05 조회 9,221
14-06-02 조회 2.5만
14-05-30 조회 2만
14-05-28 조회 1.7만
14-05-27 조회 1.8만
14-05-25 조회 1.1만
14-05-24 조회 1.1만
14-05-23 조회 9,003
14-05-15 조회 2.5만
14-05-14 조회 7,346
14-05-13 조회 1.4만