게시판세로 분류세로 슬라이드 자동메뉴 ypSlide > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

게시판세로 분류세로 슬라이드 자동메뉴 ypSlide 정보

게시판세로 분류세로 슬라이드 자동메뉴 ypSlide

첨부파일

bc_ypSlideRF.php (15.8K) 117회 다운로드 2006-07-09 15:06:10

본문

ypSlideOut 슬라이드 스크립트를 이용한 간단한"게시판세로 분류세로" 슬라이드형 자동 메뉴입니다.
대개 왼쪽 네비게이션 위치에 사용하면 좋을 것입니다.

미리보기 링크1 아래 링크된 메뉴입니다.

게시판제목 영역에 마우스를 올리면 분류메뉴가 오른쪽으로 슬라이드 되면서 나타납니다.

롤오버 메뉴로 사용 가능하며 원하는 경우에만 주석을 참고해서 게시판버튼을 만들어 주세요.

게시판 버튼 이미지 폴더가 지정된 위치에 없으면 텍스트 타입메뉴로 동작합니다.

환경설정은 첨부 소스의 주석을 참고하세요.
그대로 올리고 테스트 가능하며 "분류 숫자에 따른 서브레이어의 사이즈"만 수정하시면 됩니다.
가장 많은 분류를 가진 게시판을 기준으로 높이를 설정해서 그냥 사용해도 무방하지만,
완성도있게 활용하자면 소스의 "게시판별 서브메뉴 개별 환경설정" 부분을 참고해서 약간의 추가 작업을 해주시면 되겠습니다.

스킨형 메뉴로 제작하기에 앞서 단독 파일형으로 미리 작업한 것입니다.
rolo님 라이브러리를 참조해서 쿼리를 작성하였습니다.

rolo님께서 분류까지 컨드롤 가능한 라이브러리로 업그레이드 해주시면 그때 좀더 체계적인 스킨 작업을 해볼 예정입니다.

매번 그렇습니다만, 시각적 요소등은 각자 알아서 처리하셔야 합니다.

감사의 말씀 보다는 "버그나 개선사항"을 알려주시면 더욱 감사하겠습니다.

아래는 고수님들의 옆차기를 얻기 위해 핵심 부분만 붙여 넣습니다.
_____________________________________________________~~**

<?
// rolo님 메뉴스킨 라이브러리 참조, 일반적인 조건으로 쿼리
// 제외 게시판 - 전체 검색 사용 no, 목록열람 레벨
// 게시판 정렬 - 전체 검색 오름 차순

//### 게시판 추출 - 메뉴가 위치하는 게시판만
$grN = sql_fetch(" select gr_id, gr_subject from $g4[group_table] where gr_id = '$gur' ");
//$gur그룹 명시 또는 $gr_id로 대체하면 메뉴 위치에 아이디값 적용됨

$list = array();

// 위 에서 설명한 게시판외에 제외시키고자 하는 게시판을 수동으로 추가
$exc = "('게시판1', '게시판2', '게시판3')";

//## 게시판 추출 -목록열람 레벨 적용후 검색순 정렬
$sql = " select bo_table, bo_subject, bo_category_list, bo_new from $g4[board_table] where (bo_list_level <= $member[mb_level]) and (gr_id = '$grN[gr_id]') and bo_table not in {$exc} order by bo_order_search";

$result = sql_query($sql);

for ($i=0; $row = sql_fetch_array($result); $i++) {
    //$list[$row['bo_table']]['bo_table'] = $row['bo_table'];//이 줄은 배열값을 얻은후 다시 주석처리 합니다.
    $list[$row['bo_table']]['bo_subject'] = $row['bo_subject'];
    $list[$row['bo_table']]['sca'] = explode("|", $row['bo_category_list']);
}

// 게시판별 분류메뉴 개별 환경설정시 아래를 반드시 참고해야 합니다.
// 다양한 옵션을 이용하려면 이 개별 환경설정을 사용해야 합니다.
// 1, 위 반복문의 첫줄 주석을 풀어줍니다.
// 2, 아래 세줄의 주석을 풀고 메뉴가 링크된 페이지로 가서 게시판 배열값을 얻는다.
//foreach( $list as $key => $value)
//$caId[] = $value['bo_table']; //분류 구분
//print_r2 ($caId);// 3, 이 줄과 반복문의 주석처리된 줄은 배열값을 얻은후 다시 주석처리 합니다.
?>
<script language="javascript">
//###### 게시판별 분류메뉴 개별 환경설정 시작
//# 일괄 환경설정시 모두 주석처리합니다.
// 4, 위에서 얻은 게시판 배열값을 참고해서 게시판별 분류메뉴의 시작위치,x좌표,y좌표,너비,높이만 설정
//  var <?=$caId[0]?> = new ypSlideOutMenuCa("<?=$caId[0]?>", "right", 0, 1, 122, 105)
//  var <?=$caId[1]?> = new ypSlideOutMenuCa("<?=$caId[1]?>", "up", 0, 1, 122, 147)
//  var <?=$caId[2]?> = new ypSlideOutMenuCa("<?=$caId[2]?>", "down", 0, 1, 122, 308)
//###### 개별 환경설정 끝

//###### 전체게시판 분류메뉴 일괄 환경설정 시작
//# 개별 환경설정시 모두 주석처리합니다.
//# 가장 넓고 높은 게시판을 기준으로 너비와 높이를 설정하면 됩니다.
//# 이경우 보이지 않는 이 영역에 마우스가 올라가 있으면 분류메뉴가 사라지지 않습니다.
//# 매우 귀찮거나 메뉴 크기가 크게 다르지 않을때, 테스트 외에는 권장하지 않는 방법입니다.
<?
foreach( $list as $key => $value) {
//#################################### 분류메뉴의 시작위치,x좌표,y좌표,너비,높이만 설정
    ?>var <?=$key?> = new ypSlideOutMenuCa("<?=$key?>", "right", 120, -25, 122, 150);<?
}
?>
//###### 일괄 환경설정 끝

ypSlideOutMenuCa.writeCSS();
</script><?

//$gBtnpath = "이미지 폴더 경로" ."/". "gBtn";/* 게시판 버튼 이미지 폴더 gBtn */
//$gBtnpath = "$g4[path]" ."/". "gallery/images/menu/bc_ypSlide";/* 게시판 버튼 이미지 폴더 gBtn */
if (is_dir($gBtnpath)) {
?><div style="dispaly:none" onLoad="MM_preloadImages('<? foreach( $list as $key=> $value) { echo"{$gBtnpath}/{$key}_1.gif','{$gBtnpath}/{$key}_2.gif')";}?>"></div><?
}

?><div id='bc_global'>
    <div style='float:left; padding:5 0 0 0;'></div><?

// ## board
$menu_size= count( $list);
foreach( $list as $key=> $value) {

    ?><div id='bc_boardMenu'><?
    if (!is_dir($gBtnpath)) {/* 이미지 폴더가 없다면 텍스트 스타일(기본) */

        $style = "";
        if ($key == $bo_table)//해당 게시판 강조
        $style = "style='font-weight:bold; color:#45436c;'";
        $bo_subject = "<span $style>" . cut_str(get_text($value['bo_subject']),20,"") . "</span>";

    ?><div><a href='<?=$g4[bbs_path]?><?=$key == "sample_gal"?'/gallery/?gur':'/board.php?bo_table=';/*특정게시판 경로*/?><?=$key?>' onmouseover="ypSlideOutMenuCa.showMenu('<?=$key?>')" onmouseout="ypSlideOutMenuCa.hideMenu('<?=$key?>')" class='bc_boardName'><?=$bo_subject?></a></div><?

    }
    else {
        /* 이미지 폴더가 있다면 이미지로 표시(옵션)
        * 기본 이미지 - 게시판아이디_1.gif *
        * 롤오버 이미지 - 게시판아이디_2.gif */
        ?><span style="width:100px;height:25px;border:0px solid gray;text-align:center;vertical-align:middle;cursor:pointer;"><a href='<?=$g4[bbs_path]?><?=$key == "sample_gal"?'/gallery/?gur':'/board.php?bo_table=';/*특정게시판 경로*/?><?=$key?>' onMouseOver="ypSlideOutMenuCa.showMenu('<?=$key?>'), MM_swapImage('<?=$key?>','','<?=$gBtnpath?>/<?=$key?>_2.gif',1)" onMouseOut="ypSlideOutMenuCa.hideMenu('<?=$key?>'), MM_swapImgRestore()" onfocus='this.blur()'><?
        if ($key == $bo_table){//해당 게시판 표시
            ?><img src="<?=$gBtnpath?>/<?=$key?>_2.gif" width="120" height="25" border=0 name="<?=$key?>" alt="<?=$key?>"></a></span><?
        }else{
            ?><img src="<?=$gBtnpath?>/<?=$key?>_1.gif" width="120" height="25" border=0 name="<?=$key?>" alt="<?=$key?>"></a></span><?
        }
    }

    ?><div id='caDiv'>
    <div id="<?=$key?>Container">
    <div id="<?=$key?>Content" class="caLayer"><?

    // # sca         
    foreach( $value['sca'] as $name) {
        //print_r2 ($name);
        if ($name){//분류구분 경계를 위한 꼼수
        $style = "";
        if ($name == $sca)//해당 게시판 강조
        $style = "style='font-weight:normal; color:red;'";
        $ca_subject = "<span $style>" . cut_str(get_text($name),20,"") . "</span>";

        ?><div class='caSubject'><a href='<?=$g4['bbs_path']?>/board.php?bo_table=<?=$bo_table?>&sca=<?=urlencode($name)?>' class='caName'><?=$ca_subject?></a></div><?
        }//name
    }//foreach
    ?></div></div></div>
    </div><?// group end
}//foreach 주메뉴 끝
   
?></div><!-- global end -->
추천
0
  • 복사

댓글 13개

하하하...

메뉴 전문가가 되셨네요^^
이미지 설정까지 하셨네요...에고

저도 보탬이되야 하는데 풀칠하느라...
고생 하셨습니다.
휴일에 놀면 뭐하나 버전입니다.^^

이미지 형태를 선호하시는 분이 많아서 이전 몇개의 메뉴부터 옵션으로 넣어두었습니다.

바쁘시다니 반가운 말씀입니다.

많이 버시고 좋은일 많이 하면서 살아가면 최고죠~!!
바로 아래 그룹가로 게시판세로 메뉴에서 아래 부분을 수정해서 쓰시면 될듯합니다.

<div id='boardDiv'>
    <div id="<?=$key?>Container">
    <div id="<?=$key?>Content" class="boardLayer"><?
    // # board         
    foreach( $value['bbs'] as $name) {     

        $style = "";
        if ($name['bo_table'] == $bo_table)//해당 게시판 강조
        $style = "style='font-weight:normal; color:red;'";
        $bo_subject = "<span $style>" . cut_str(get_text($name['bo_subject']),20,"") . "</span>";

    ?><div class='boardSubject'><a href='<?=$g4['bbs_path']?>/board.php?bo_table=<?=$name['bo_table']?>' class='boardName'><?=$bo_subject?></a></div><?

부분에서 먼저 아래 사항을 수정합니다.
스타일 시트에서 아래 해당 속성을 찾아서 수정합니다.

class="boardLayer" 너비를 충분히 넓혀 줍니다. 500px정도로,, 높이는 30px정도로 해주시고 테스트를 위해
border:1px solid orange; 처럼 테두리를 주어서 점검후 나중에 테두리를 0 으로 설정하세요.

<div class='boardSubject'>는 <span class='boardSubject'>로 닫는 태그까지 변경해줍니다.

class='boardName' 의 display:block; 속성을 없앱니다.

그다음

<?
foreach( $list as $key => $value) {
//#################################### 서브메뉴의 시작위치,x좌표,y좌표,너비,높이만 설정
    ?>var <?=$key?> = new ypSlideOutMenu("<?=$key?>", "down", 0, 1, 130, 350);<?
}
?>
부분에서 너비와 높이를 class="boardLayer" 에서 설정한 것과 같게 해주면 될것입니다.

http://www.babybox.co.kr/g4/?gur=work 여기 상단 두번째 메뉴가 손질은 안 되었지만 유사한 경우입니다.
다시 좋은 팁을 주셔서 감사합니다..

그런데요.. 어제 제가 질문드리 접근사용 그룹도 메뉴가 보이는 문제가 아직 해결이 안되는 군요..

where 다음의 sql구문을 어떻게 수정을 해도 결과는 똑 같이 나오네요..
여러 여건상 apm등 다양한 환경에서 완벽한 테스트를 못하는점 양해 바랍니다.
가급적 일반적인 환경에서 테스트후 의견 개진이 이루어졌으면 좋겠습니다.
양해 바랍니다.
버그리포트차 들렀다가 나스카님의 따끈한 코멘트를 이제야 발견했습니다.^^;
실제 테스트해본 분은 안계신듯,,

서브메뉴에서 테이블값이 넘어오지 않는 오류를 수정합니다.
431열 <?=$bo_table?> --> <?=$key?> 로 수정해야 합니다.

        ?><div class='caSubject'><a href='<?=$g4['bbs_path']?>/board.php?bo_table=<?=$key?>&sca=<?=urlencode($name)?>' class='caLink'><?=$ca_subject?></a></div><?
스크랩만 했으므로... 패쑤~*

지속적인 관리까지 해 주시니 감사할 따름입니다.
(물론... 사용자의 코멘트로 한 번씩 더 돌아보게 되시죵?! *^^*)
© SIRSOFT
현재 페이지 제일 처음으로