메뉴 만들기 도와주세요. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

메뉴 만들기 도와주세요. 정보

메뉴 만들기 도와주세요.

본문

 
얼마전 설치 및 사용후기에 올라온 사이트 입니다.
 
메뉴가 마치 플래시로 작업해서 다운... 펼쳐짐 의 형태로 나오는 군요...
 
자바인것 같기는 한데....
 
제가 자바 소스에는 상당히 약한 편이라 도저히 엄두가 안나네요...
 
혹시 자바가 아니라면 죄송합니다. (무식이 죄 -_-;;)
 
그냥 플래시로 해 버릴까 하는 생각도 있지만... (실은 플래시는 더 못함... -_-;;)
 
그래도 고전적인 느낌이 더 좋을 것 같기도 하구요....
 
이렇게 마우스 오버 하면 그룹에 연결된 게시판 주루룩 나오고...
 
클릭하면 왼쪽에 세로로 게시판 명이 나오게 하는 소스 좀 정리해 주세요.
 
 
원하지 않는 게시판은 빼고 넣거나....
 
게시판의 순서도 마음대로 조정 가능 한 걸로 나오는데.....
 
어렵네요.
 
 
 
플록님이나 rolo님이 올려주신 소스 몇 가지 살펴봤는데....
 
초보에게는 좀 무리더라구요.....
 
설명이 어려우시면 그냥 파일로 만들어서 올려주시면 감사히 받겠습니다.
 
제가 가진 포인트 얼마 안되지만 다 드려요....
 
그럼, 즐거운 저녁 되세요.
 
예제 사이트 처럼 원합니다.
  • 복사

댓글 전체

도움이 되실지 모르겠지만 링크 하신곳과 비슷한 원리 이므로 주석설명을 참조 바랍니다.

참고로 상단 메뉴와 왼쪽의 그룹별 메뉴는 스킨화 되어 있지만 기능상 상관은 없습니다.


미리보기 : http://kkk.myhome.tv/ahome/bbs/group.php?gr_id=sub2

1, 상단의 그룹별 출력


<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
/////////////////////////////////////////////////////////////////////
$menu_main_skin_path ="{$g4[path]}/include/menu_main/{$configs[cfmenu_skin]}";
?>
<table  width="100%" height="52" border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="21" height="52">
<img src="<?=$menu_main_skin_path?>/img/menu_bg_01.gif" width="21" height="52" alt=""></td>
<td background="<?=$menu_main_skin_path?>/img/menu_bg_02.gif"  height="52">
<?
#################################################################
# 그누보드3,4 - 파이어폭스, 아이이 (그누보드3 사용자-아랫쪽 덧붙임)
# 그룹은 가로, 게시판은 세로 배열된 속칭 자동메뉴
# 해당 그룹이나 게시판으로 이동시 스타일값이 적용되므로 개인에 맞게 수정
# 소스가운데 gr_id=>gr_id로 변경, 경로는 적절히 필요한 대로 변경
#게시판 정열순서는 검색순
# 피드백 http://gnusr.com/g4/bbs/tb.php/future/10
#################################################################

if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

$gr_height = 27; // 그룹 메뉴 높이
$bo_layer_top = 15;  // 보드 레이어 상단 위치 그룹메뉴 높이1/2 정도
$bo_layer_left = -120;  // 보드 레이어 왼쪽마진
$bo_layer_width = 120;// 보드 레이어 너비
$bo_layer_tr_height = 20; // 보드 레이어 높이
$bo_layer = ""; // 보드 레이어 임시저장 변수

echo "<table width='100%' height='{$gr_height}' border='0' cellpadding='0' cellspacing='0'><tr>\n";

// 그룹 접근 권한에 따라 그룹메뉴 보이기 여분필드 gr_1 순으로 정렬
$sql = " SELECT a.gr_id, a.gr_subject, a.gr_use_access, b.mb_id FROM $g4[group_table] AS a LEFT JOIN $g4[group_member_table] AS b ON a.gr_id = b.gr_id WHERE  (b.mb_id = '$member[mb_id]' AND a.gr_use_access = '1' ) OR a.gr_use_access = '0'  ORDER BY a.gr_1";
// 제외그룹설정 root님 콤마로 구분하여 입력
$sql = " select * from $g4[group_table] where gr_id not in ('html', 'banner', 'guest') order by gr_1";

$result = sql_query($sql);
while ($row=mysql_fetch_array($result)) {
{
//그룹링크
$gr_href = "<table width=100% height=38 cellpadding='0' cellspacing='0'><tr><td align=center><a href='$g4[bbs_path]/group.php?gr_id=$row[gr_id]' class='on' onfocus='this.blur()'><b>$row[gr_subject]</b></a></td><td width=1></td></tr></table>";
$gr_href_on = "<table width=100% height=52 cellpadding='0' cellspacing='0'><tr><td WIDTH=16 HEIGHT=52><IMG SRC='$menu_main_skin_path/img/main_a_01.gif' WIDTH=16 HEIGHT=52 border=0></td><td align=center  background='$menu_main_skin_path/img/main_a_02.gif'><a href='$g4[bbs_path]/group.php?gr_id=$row[gr_id]' class='menu_on' onfocus='this.blur()'><font color=#FF8000><b>$row[gr_subject]</b></font></a></td><td WIDTH=15 HEIGHT=52><IMG SRC='$menu_main_skin_path/img/main_a_03.gif' WIDTH=15 HEIGHT=52 border=0></td></tr></table>";
// 그룹별 보드 표시
$bo_layer = "";
$m_over = "";
$m_out  = "";
$menulayer_id  = "";

// 게시판 목록보기 권한설정순 정렬
$sql2 = " SELECT bo_subject, bo_table from $g4[board_table] where (bo_list_level <= $member[mb_level]) and (gr_id = '$row[gr_id]') order by bo_order_search ";
$result2 = sql_query($sql2);
for ($j=0; $row2=mysql_fetch_array($result2); $j++) {
$bo_layer .= "<tr height='$bo_layer_tr_height'><td style='border-bottom-width:1;border-bottom-color:#dddddd;border-bottom-style:dotted;'>";
if ($row2[bo_table] == $bo_table)
$bo_layer .= "<IMG SRC='$menu_main_skin_path/img/bullet.gif' WIDTH=22 HEIGHT=11 border=0><a href='$g4[bbs_path]/board.php?bo_table=$row2[bo_table]' class='off' onfocus='this.blur()'>{$blue_bullet}{$row2[bo_subject]}</a></td></tr>";
else
$bo_layer .= "<IMG SRC='$menu_main_skin_path/img/bullet.gif' WIDTH=22 HEIGHT=11 border=0><a href='$g4[bbs_path]/board.php?bo_table=$row2[bo_table]' class='on' onfocus='this.blur()'>$row2[bo_subject]</a></td></tr>";
}
mysql_free_result($result2);
if ($bo_layer) {
$m_over = "menulayer_{$row[gr_id]}.style.display=''; ";
$m_out  = "menulayer_{$row[gr_id]}.style.display='none'; ";
$menulayer_id  = "menulayer_{$row[gr_id]}";
}

if ($row[gr_id] == $gr_id)
echo "<td width=130 align='center' onmouseover=$m_over onmouseout=$m_out height='$gr_height' class='top_menu_btn'>$gr_href_on</td>\n";
else
echo "<td width=130 align='center' onmouseover=$m_over onmouseout=$m_out height='$gr_height' class='top_menu_btn'>$gr_href</td>\n";
//echo $line_shadow;
}
// 보드 레이어 위치 설정
//$pos = $bo_layer_top + ($bo_layer_tr_height);
//$pos = $bo_layer_top + ($bo_layer_tr_height * ($i-100));
if ($bo_layer) {
//echo "<td>";absolute
echo "<td>";
echo "<div id='{$menulayer_id}' style='margin-top:{$bo_layer_top}px; margin-left:{$bo_layer_left}px; width:{$bo_layer_width}px; display:none; position:absolute;'>";
echo "<table border=0 cellpadding=2 cellspacing=0  bgcolor=#5E92B3  width=100% onmouseover=$m_over onmouseout=$m_out><tr><td>";
echo "<table border=0 width=100%  bgcolor=#5E92B3>$bo_layer</table>";
echo "</td></tr></table>";
echo "</div>";
echo "</td>\n";
//echo "</td></tr><tr>\n";
}
}
echo "</tr></table>\n";

mysql_free_result($result);
?>
</td>
<td width="20" height="52">
<img src="<?=$menu_main_skin_path?>/img/menu_bg_03.gif" width="20" height="52" alt=""></td>
</tr>
</table>
<style>
a.on:link, a.on:visited, a.on:active { /*해당 그룹 강조*/
color:#ffffff;
}
a.on:hover { /*마우스를 올렸을때 폰트 및 배경색상*/
color:#ff9933;
}

a.off:link, a.off:visited, a.off:active { /*일반 그룹*/
color:#ff9988;
}
a.off:hover { /*마우스를 올렸을때 폰트 및 배경색상*/
color:#bb00dd;
}
</style>
왼쪽의 그룹별 분류 (카데고리 자동 출력)

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
/////////////////////////////////////////////////////////////////////
$menu_left_skin_path ="{$g4[path]}/include/menu_left/{$configs[cftop_skin]}";
?>
<div style='height:10px;'></div>
<table style="border-collapse:collapse;" align="center" cellpadding="0" cellspacing="0" width="190">
    <tr>
        <td width="190" height="5" colspan="3">
            <p><img src="<?=$menu_left_skin_path?>/img/outline_top.gif" width="190" height="5" border="0"></p>
        </td>
    </tr>
    <tr>
        <td width="5" background="<?=$menu_left_skin_path?>/img/outline_left.gif">
        </td>
        <td width="180" align="center">

<table id="Table_01" width="180"  border="0" cellpadding="0" cellspacing="0">
<tr>
<td valign=top>
<table id="Table_01" width="180"  border="0" cellpadding="0" cellspacing="0">
<tr>
<td height=30 bgcolor=#73BD47>
<table id="Table_01" width="180"  border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" height=30 background="<?=$menu_left_skin_path?>/img/sub_menu_blank.gif">
&nbsp;&nbsp;<font color="white"><b>:::</b></font>
<?
  if($group[gr_subject]!='')  {
echo "<font color='white'><b>$group[gr_subject]</font></b>";
  }
  else {
          echo "<font color='white'><b>HOME</b></font>";
        }
?>
</td>

</tr></table>
</td>

</tr></table>
<? if (!defined("_GNUBOARD_")) exit; // bcRFV_css.php
########################################################
# CSS로 구현한 그누보드4 게시판 및 분류 자동추출 세로 메뉴
# 게시판 및 분류에서 위치표시+새글갯수 표시, 분류 세로열 조정가능
# 2006년 8월 11일, 헐랭이님, 나스카님, rolo님, izen님 소스코드 참조 수정 - 플록
########################################################
?>
<style type="text/css">
#bcRFV_global { /*메뉴 가장자리를 감싸는 영역*/
width:160px;
background-color:transparent/*black*/;
position:relative;
padding:5 0 0 0; 
}

#bcRFV_group { /*그룹메뉴 영역*/
width:165px;
margin:5 0 0 5;
padding:7 0 0 10;
background-color:silver;
/*font-weight:bold;*/
}
.bcRFV_group_subject { /*그룹제목 스타일*/
width:156px;/*block 설정시 너비 빼먹으면 msie에서 안먹힘*/
height:28px;
display:block; /*포인터 영역 확대*/
}

#bcRFV_board { /*게시판 제목*/
width:165px;
margin:0 0 0 0;
padding:0 0 0 10;
background-color:transparent;
position:relative;
}
a.bcRFV_board_subject { /*게시판제목 링크 스타일*/
width:165px;/*block 설정시 너비 빼먹으면 msie에서 안먹힘*/
height:15px;
display:block; /*포인터 영역 확대*/
border-bottom:0px dotted gray;
padding:5 5 3 10;
}

#bcRFV_sub { /*분류 영역*/
position:relative;
border-right:0px dotted gray;
border-bottom:0px dotted #E7E3E7;
border-left:0px dotted gray;
}
a.bcRFV_sub_subject { /*분류제목 링크 스타일*/
width:165px; /*block 설정시 너비 빼먹으면 msie에서 안먹힘*/
height:15px;
display:block; /*포인터 영역 확대*/
border-bottom:0px dotted gray;
margin-left:10;
padding:5 0 2 0;
}

.new {
font: oblique small-caps 500 9px/9px arial;
color:red;
}
.newc {
font: oblique 12px/15px arial;
}
</style>
<?

// rolo님 메뉴스킨 라이브러리 참조, 일반적인 조건으로 쿼리
// 제외 게시판 - 전체 검색 사용 no, 목록열람 레벨
// 게시판 정렬 - 전체 검색 오름 차순
// 나스카님 원글 및 분류별 새글 카운트(izen님 php속도향상팁 적용)
?>
<div id='bcRFV_global'>
<?

//### 그룹 추출 - 메뉴가 위치하는 그룹
$grN = sql_fetch(" select gr_id, gr_subject from $g4[group_table] where gr_id = '$gr_id' ");//그룹명시

$bar = "<IMG SRC='$menu_left_skin_path/img/img47.gif' WIDTH=20 HEIGHT=9 border=0>";

$list = array();

//제외시키고자 하는 게시판을 수동으로 추가
$exc = "('gm11_b1', '게시판2', '게시판3')";

//## 게시판 추출 -목록열람 레벨 적용후 검색순 정렬
$sql = " select bo_table, bo_subject, bo_category_list, bo_use_category, 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_subject'] = $row['bo_subject'];
    $list[$row['bo_table']]['sca'] = explode("|", $row['bo_category_list']);
    $list[$row['bo_table']]['bo_use_category'] = $row['bo_use_category'];
    $list[$row['bo_table']]['bo_new'] = $row['bo_new'];
}

//### 그룹
$menu_size= count( $list);
$group_subject = "<span style='font-weight:bold;'>" . cut_str(get_text($grN['gr_subject']),20,"") . "</span>";
$group_subject .= "<span style='font-size:8pt;'>&nbsp;Total:" . $menu_size . "</span>";

?>

<?

//## 게시판 목록
foreach( $list as $key=> $value) {
   
    $tmp_write_table = $g4[write_prefix] . $key;
    $intime = date("Y-m-d H:i:s", time()-3600*$value['bo_new']);
    //원글 및 코멘트 새글 카운트 by nasca, izen님 빠른쿼리로 보강
    $sql_new = mysql_query(" select count(wr_datetime) as wr_datetime from $tmp_write_table where  wr_is_comment = '0' and wr_datetime >= '$intime' ");
    $row_new = mysql_fetch_array($sql_new);
    $sql_cm_new = mysql_query(" select count(wr_datetime) as wr_datetime from $tmp_write_table where  wr_is_comment <> '0' and wr_datetime >= '$intime' ");
    $row_cm_new = mysql_fetch_array($sql_cm_new);

    $bn_count = $row_new['wr_datetime'];
    $bn_countc = $row_cm_new['wr_datetime'];

    if ($bn_count || $bn_countc > 0) {
        $new = "<span class='new'><img src='$g4[path]/skin/latest/basic/img/icon_new.gif' border='0' width='14' height='6' align=absmiddle>(" . $bn_count . '/' . $bn_countc . ")</span>";
        }else{
            $new = "";
            }
 
    foreach( $value['sca'] as $category) {//분류가 있고 분류사용 체크된 게시판 별도표시
        $sicon = "";
        if (!($value['bo_use_category'] == "1") &&! ($category))
  {
  if ($key == $bo_table){
  $sicon = "<IMG SRC='$menu_left_skin_path/img/page2.gif' WIDTH=14 HEIGHT=14 align='absmiddle' border=0>&nbsp;"; //분류가 없을 때 출력아이콘
  }
  else
  {
  $sicon = "<IMG SRC='$menu_left_skin_path/img/page.gif' WIDTH=14 HEIGHT=14 align='absmiddle' border=0>&nbsp;"; //분류가 없을 때 출력아이콘
  }
  }
  elseif ($key == $bo_table)
  {
    $sicon = "<IMG SRC='$menu_left_skin_path/img/bullet.gif' WIDTH=15 HEIGHT=13 align='absmiddle' border=0>&nbsp;"; //분류가 있고 활성화된 게시판일 때 출력아이콘
  }
  else
  {
    $sicon = "<IMG SRC='$menu_left_skin_path/img/folder2.gif' WIDTH=15 HEIGHT=13 align='absmiddle' border=0>&nbsp;"; //분류가 있고 비활성된 게시판일 떼 츨력아이콘
  }
    }

  $style = "";
    if ($key == $bo_table)//해당 게시판 강조
{
    $style = "style='font-weight:bold; color:red;'";
} else {
    $style = "style='font-weight:bold;'";
}
    $bo_subject = "<span $style>" . cut_str(get_text($value['bo_subject']),20,"") . "</span>" ;
 
    ?>
<a href='<?=$g4[bbs_path]?>/board.php?bo_table=<?=$key?>' class='bcRFV_board_subject' onfocus='this.blur()'><?=$sicon?><?=$bo_subject?></a>
<div id='bcRFV_sub'>
<?

    //분류(카테고리)목록 세로배열
    $bo_width = 100;//전체 너비 %
    $cols = 1;//세로 칼럼수
    $ca_width = intval($bo_width / $cols);//분류 너비 %

    $cnt = 1;

    //게시판이고 분류사용 체크되있으며 분류내용 있는 경우
    if (($key == $bo_table) && (($value['bo_use_category'] == "1") && ($category))) {

    ?>
<div style="width:<?=$bo_width?>%; border:0px solid white;">
<?
   
    //# 분류 목록
    foreach( $value['sca'] as $category) {
        //bo_new에서 지정한 시간내 분류별 원글 및 코멘트 새글 카운트 by nasca, izen님 빠른쿼리로 보강
        $sql2_new = mysql_query(" select count(wr_datetime) as wr_datetime from $tmp_write_table where wr_is_comment = '0' and wr_datetime >= '$intime' and ca_name = '$category'");
        $row2_new = mysql_fetch_array($sql2_new);
        $sql2_cm_new = mysql_query(" select count(wr_datetime) as wr_datetime from $tmp_write_table where wr_is_comment <> '0' and wr_datetime >= '$intime' and ca_name = '$category'");
        $row2_cm_new = mysql_fetch_array($sql2_cm_new);

        $cn_count = $row2_new['wr_datetime'];
        $cn_countc = $row2_cm_new['wr_datetime'];

        if ($cn_count || $cn_countc > 0) {
            $new2 = "&nbsp;<span class='new'>(" . $cn_count . '/' . $cn_countc . ")<img src='$g4[path]/skin/latest/basic/img/icon_new.gif' border='0' width='14' height='6' align=absmiddle></span>";
            }else{
                $new2 = "";
                } 

        //링크에서 한글로된 카데고리 이름을 urlencode시킴
        $sca_url = urlencode($category);

        $style = "";
        if ($category == $sca)//해당 게시판 강조
        $style = "style='font-weight:normal; color:red;'";
        $ca_subject = "<span $style>" . cut_str(get_text($category),30,"") . "</span>";

        ?>
<div style="width:150; padding:3 0 3 10;"><a href='<?=$g4['bbs_path']?>/board.php?bo_table=<?=$key?>&sca=<?=urlencode($category)?>' style="border-bottom:0px dotted gray;" onfocus='this.blur()'><?=$bar?> <?=$ca_subject?></a>
        </div>
<?

        if ($cnt == $cols){
            $cnt = 0;
          ?>
  </div>
  <?
            }

        $cnt++;
       
        }//foreach
      ?>
</div>
<?
      }//if
    ?>
</div></div>
<?
  }//foreach 주메뉴 끝
?></div><!-- bcRFV_global end -->
<div style='clear: both;'></div>
 

 </td>

</tr>
</table>

        </td>
        <td width="5" background="<?=$menu_left_skin_path?>/img/outline_right.gif">
        </td>
    </tr>
    <tr>
        <td width="190" height="5" colspan="3">
            <p><img src="<?=$menu_left_skin_path?>/img/outline_bottom.gif" width="190" height="5" border="0"></p>
        </td>
    </tr>
</table>
<style>td{cursor:hand}</style>

<script>
function menuOn(name) {
 submenu = eval("submenu"+name+".style");
 submenu.visibility = "visible";
}
function menuOff(name) {
 submenu = eval("submenu"+name+".style");
 submenu.visibility = "hidden";
}
</script>
 
<table bgcolor=dddddd width=180 height=30 cellpadding=0 cellspacing=0>
 <tr>
  <td align=center onMouseOver="menuOn(1)" onMouseOut="menuOff(1)">
  <b>Menu1</b></td>
  <td align=center onMouseOver="menuOn(2)" onMouseOut="menuOff(2)">
  <b>Menu2</b></td>
 </tr>
</table>
 
<span id="submenu1" onMouseOver="menuOn(1)" onMouseOut="menuOff(1)" style="position:absolute; left:10; top:45; visibility:hidden; background-color:eeeeee">
 <table cellpadding=0 cellspacing=0>
  <tr><td>subMenu1_1</td></tr>
  <tr><td>subMenu1_2</td></tr>
 </table>
</span>
 
<span id="submenu2" onMouseOver="menuOn(2)" onMouseOut="menuOff(2)" style="position:absolute; left:100; top:45; visibility:hidden; background-color:eeeeee">
 <table cellpadding=0 cellspacing=0>
  <tr><td>subMenu2_1</td></tr>
  <tr><td>subMenu2_2</td></tr>
 </table>
</span>

테이블안에 이미지를 빽그라운드 or 이미지로 넣어도 됩니다....
헐랭이님 정말 많은 도움이 되었어요....
우선 익숙하지 않은 소스라 분석해 보고 적용해 볼께요...
시간이 많이 걸릴 것 같네요....

잘 모르는 부분 질문해도 돼죠?? *^^*
© SIRSOFT
현재 페이지 제일 처음으로