해피아이님께 드리는 질문입니다 > 그누3질답

그누3질답

해피아이님께 드리는 질문입니다 정보

그누보드 해피아이님께 드리는 질문입니다

본문

우선 좋은 팁을 올려주신 해피아이님께 깊은 감사를 드립니다. 덕분에 원하는 사이트에 좀 더 다가설 수 있었습니다.

그런데 팁을 제 의도에 맞게 수정을 해서 그런지 생각지도 못한 에러들이 생기는군요. 한번 보아주시면 더욱 감사드리겠습니다.

작업 중인 게시판 주소 : http://www.siruzine.com/gnu3/index.php?doc=bbs/gnuboard.php&bo_table=memo

메인페이지를 메모스킨 게시판으로 작업했으며 상단파일에는 님의 팁으로 특정그룹의 최근게시글들만 출력시키게끔 한 html페이지(00_top.html)를 넣었고 하단파일에는 역시 님의 팁으로 특정그룹의 최근코멘트들만 출력시키게끔한 html페이지(00_bottom.html)를 넣었습니다. 가운데 회색부분이 메모스킨의 본문들입니다. 아, 그리고 상단파일에 넣은 소스는 글제목이 나오게끔 수정했습니다. 제가 바꾼 소스들은 글말미에 따로 올리겠습니다. (all_article.php 와 all_comment.php)

문제는 상단파일의 최근글들이 시간순대로만 올라오는 것이 아니란 겁니다. 이건 최근코멘트들도 마찬가지더군요. 제로보드와는 달리 코멘트가 본문과 같이 저장되어서 그런 건지..
그리고 코멘트는 보다 심각합니다. 보시면 아시겠지만 코멘트만 올라오는 것이 아니라 중간 쯤에 본문까지 나와버려서 테이블이 깨지는군요. 물론 이것도 시간순은 아닌 것 같습니다. 이게 왜 이런 건지 제가 고친 소스들을 좀 봐주시면 정말 고맙겠습니다. 그럼 소스를 올리겠습니다.

■■■■■■■ all_article.php 입니다.
<?
// 보기를 원하는 곳에서..인클루드 시킴...
// 예) include "./all_lastest.php";

$grid = "VoZ"; // 보기를 원하는 그룹,, 공백이면 전체 그룹
$rows = 15; // 보여질 최근 게시물의 갯수
$len  = 0; // 내용크기 지정인데 제목만 나오게 0으로..
?>

<table width=100% cellpadding=0 cellspacing=0 border=0>
<tr><td height=5>
<tr><td>
■ <b>최근 올라온 글들</b>
<tr><td height=5>
<?
if($grid) { // 그룹별로 하는 검색이면...그 그룹에서만...
$sql_1 = " select * from $cfg[table_board] where bo_use_search = '1' and gr_id = '$grid' order by bo_order_search ";
}
else { // 그렇지 않으면 전체 그룹에서 검색~~
$sql_1 = " select * from $cfg[table_board] where bo_use_search = '1' order by bo_order_search ";
}

$result = sql_query($sql_1);

$i = 0;
$k = 0;

while ($row = mysql_fetch_array($result)) {
$bo_scount += $row["bo_total_count"];
$i++;
// 해당 게시판의 최근글 $rows 개...
$tbl = "{$cfg[write_table_prefix]}{$row[bo_table]}";

// 테이블중에서.. 가장 최근글 $rows 개를 불러온다...코멘트 제외 원글만..
$sql2 = " select wr_id, wr_comment, wr_datetime, wr_subject, wr_commentcnt from $tbl where wr_comment = '0' order by wr_datetime desc limit 0, $rows";
// 만일 코멘트만 나타내려면 where wr_comment <> '0' 로 바꾸어 준다..
// 코멘트와 원글을 나타내려면 whrer wr_comment = '0' 부분을 삭제한다...
                //★★★wr_subject 란 함수(?) 추가

$result2 = sql_query($sql2); // 쿼리 실행
$j = 0;
for($j=0; $brow = mysql_fetch_array($result2); $j++) {
$wr_year = substr($brow["wr_datetime"],0,4); // 년도
$wr_month = substr($brow["wr_datetime"],5,2); // 월
$wr_day = substr($brow["wr_datetime"],8,2); // 일
$wr_hour = substr($brow["wr_datetime"],11,2); // 시
$wr_min = substr($brow["wr_datetime"],14,2); // 분
$wr_sec = substr($brow["wr_datetime"],17,2); // 초

$s_str = ""; // 초기화...
// 날짜는 유닉스 시간으로 변환한다..이유? 소트를 위해서..
$s_str = mktime($wr_hour,$wr_min,$wr_hour,$wr_month,$wr_day,$wr_year).'|'.$brow[wr_id].'|'.$row[bo_table].'|'.$row[gr_id];
$tmp_array[$k] = $s_str; // 이제 배열에 저장하고...
$k++;
} // end for()
} // end while()

array_multisort($tmp_array,SORT_DESC,SORT_STRING); // 배열에 저장된 자료를 소트한다..

for($l=0; $l<$rows; $l++) { // 소트된 자료를 나타낼 자료수 만큼만...
$s_str = "";
$s_str = explode("|", $tmp_array[$l]);
$w_date = strftime ("%Y-%m-%d",$s_str[0]); // 시간을 원래대로 환원, 년월일만...

// 해당 게시판의 최근글 $rows 개...
$b_name = "{$cfg[write_table_prefix]}{$s_str[2]}";
// 가장 최근글 순서대로 테이블마다 접속해서 글을 불러온다...
$sql3 = " select wr_id, wr_name, wr_content, wr_comment, wr_subject, wr_commentcnt, wr_num, wr_num from $b_name where wr_id = $s_str[1]";
$result3 = sql_query($sql3); // 쿼리 실행
$drow = mysql_fetch_array($result3);
                //★★★wr_subject 란 함수(?) 추가

// 내용을 원하는 크기로 자른다..
$drow["wr_content"] = cut_str($drow["wr_content"],$len);
if($drow["wr_comment"] != "0") {
// 코멘트 글이면...원글을 찾아야 한다..
// 코멘트글은 직접 이동할 수가 없다.. 그누보드 특성상...
$sql_comment = " select wr_id from $b_name where wr_num = $drow[wr_num] and wr_comment = '0' and wr_num = $drow[wr_num]";
// wr_num 이 같고 원글이면서.. wr_parent_id 가 같은 글을 찾음..
$result4 = sql_query($sql_comment); // 쿼리 실행
$crow = mysql_fetch_array($result4);
$comment = ''; // 코멘트 임을 표시하기 위하여...
$drow["wr_id"] = $crow["wr_id"]; // wr_id 값 변경...
}
else { // 원글이다...
$comment = '';
}

?>
<tr onmouseover="this.style.backgroundColor=''" onmouseout="this.style.backgroundColor=''" style='padding:0 0 0 0;border-width:0 0 1 0; border-color:F0F0F0; border-style:solid;' style=cursor:hand; onclick=location.href='<?="./?doc=$cfg[bbs_dir]/gnuboard.php&bo_table=$s_str[2]&wr_id=$drow[wr_id]"?>'>
<td style=font-size:10pt;color:#999999><img src=imgs/post.gif> <b><?=$drow[wr_subject]?></b> <!------★★★wr_content를 wr_subject 로 바꿈------->
<font style=font-size:7pt;color:#cccccc;>[<?=$drow[wr_commentcnt]?>]
<tr><td height=3>

<?
} // end for()

echo "<tr><td height=5 style='border-style:none;'></td></tr>";

mysql_free_result($result); // sql 해제...

// 총 글의 갯수를 구하는 부분임...
if ($bo_scount) {
  echo "";
} else {
  echo "<tr><td height=100 align=center colspan=3>등록된 글이 없습니다.</td></tr>";
}
?>

</table>


■■■■■■■ all_comment.php 입니다.
<?
// 보기를 원하는 곳에서..인클루드 시킴...
// 예) include "./all_lastest.php";

$grid = "VoZ"; // 보기를 원하는 그룹,, 공백이면 전체 그룹
$rows = 15; // 보여질 최근 게시물의 갯수
$len  = 79; // 내용을 몇자까지 나타낼것인가...잘라서 보여줌...
?>

<table width=100% cellpadding=0 cellspacing=2 border=0>
<tr><td bgcolor=#f1f1f1 height=1>

<?
if($grid) { // 그룹별로 하는 검색이면...그 그룹에서만...
$sql_1 = " select * from $cfg[table_board] where bo_use_search = '1' and gr_id = '$grid' order by bo_order_search ";
}
else { // 그렇지 않으면 전체 그룹에서 검색~~
$sql_1 = " select * from $cfg[table_board] where bo_use_search = '1' order by bo_order_search ";
}

$result = sql_query($sql_1);

$i = 0;
$k = 0;

while ($row = mysql_fetch_array($result)) {
$bo_scount += $row["bo_total_count"];
$i++;
// 해당 게시판의 최근글 $rows 개...
$tbl = "{$cfg[write_table_prefix]}{$row[bo_table]}";

// 테이블중에서.. 가장 최근글 $rows 개를 불러온다...코멘트 제외 원글만..
$sql2 = " select wr_id, wr_comment, wr_datetime from $tbl where wr_comment <> '0' order by wr_datetime desc limit 0, $rows";
// 만일 코멘트만 나타내려면 where wr_comment <> '0' 로 바꾸어 준다..
// 코멘트와 원글을 나타내려면 whrer wr_comment = '0' 부분을 삭제한다...

$result2 = sql_query($sql2); // 쿼리 실행
$j = 0;
for($j=0; $brow = mysql_fetch_array($result2); $j++) {
$wr_year = substr($brow["wr_datetime"],0,4); // 년도
$wr_month = substr($brow["wr_datetime"],5,2); // 월
$wr_day = substr($brow["wr_datetime"],8,2); // 일
$wr_hour = substr($brow["wr_datetime"],11,2); // 시
$wr_min = substr($brow["wr_datetime"],14,2); // 분
$wr_sec = substr($brow["wr_datetime"],17,2); // 초

$s_str = ""; // 초기화...
// 날짜는 유닉스 시간으로 변환한다..이유? 소트를 위해서..
$s_str = mktime($wr_hour,$wr_min,$wr_hour,$wr_month,$wr_day,$wr_year).'|'.$brow[wr_id].'|'.$row[bo_table].'|'.$row[gr_id];
$tmp_array[$k] = $s_str; // 이제 배열에 저장하고...
$k++;
} // end for()
} // end while()

array_multisort($tmp_array,SORT_DESC,SORT_STRING); // 배열에 저장된 자료를 소트한다..

for($l=0; $l<$rows; $l++) { // 소트된 자료를 나타낼 자료수 만큼만...
$s_str = "";
$s_str = explode("|", $tmp_array[$l]);
$w_date = strftime ("%Y-%m-%d",$s_str[0]); // 시간을 원래대로 환원, 년월일만...

// 해당 게시판의 최근글 $rows 개...
$b_name = "{$cfg[write_table_prefix]}{$s_str[2]}";
// 가장 최근글 순서대로 테이블마다 접속해서 글을 불러온다...
$sql3 = " select wr_id, wr_name, wr_content, wr_comment, wr_num, wr_num from $b_name where wr_id = $s_str[1]";
$result3 = sql_query($sql3); // 쿼리 실행
$drow = mysql_fetch_array($result3);

// 내용을 원하는 크기로 자른다..
$drow["wr_content"] = cut_str($drow["wr_content"],$len);
if($drow["wr_comment"] != "0") {
// 코멘트 글이면...원글을 찾아야 한다..
// 코멘트글은 직접 이동할 수가 없다.. 그누보드 특성상...
$sql_comment = " select wr_id from $b_name where wr_num = $drow[wr_num] and wr_comment = '0' and wr_num = $drow[wr_num]";
// wr_num 이 같고 원글이면서.. wr_parent_id 가 같은 글을 찾음..
$result4 = sql_query($sql_comment); // 쿼리 실행
$crow = mysql_fetch_array($result4);
$comment = ''; // 코멘트 임을 표시하기 위하여...
$drow["wr_id"] = $crow["wr_id"]; // wr_id 값 변경...
}
else { // 원글이다...
$comment = '';
}

?>
<tr onmouseover="this.style.backgroundColor='f9f9f9'" onmouseout="this.style.backgroundColor=''"
style='padding:0 0 0 0;border-width:0 0 1 0; border-color:F0F0F0; border-style:solid;'
style=cursor:hand;
onclick=location.href='<?="./?doc=$cfg[bbs_dir]/gnuboard.php&bo_table=$s_str[2]&wr_id=$drow[wr_id]"?>'>         
<td style=font-size:9pt;color:#999999>
<b><font style=color:#6699cc;font-size:7pt;>@</font><?=$drow[wr_name]?></b>
<?=$drow[wr_content]?>

<?
} // end for()

echo "";

mysql_free_result($result); // sql 해제...

// 총 글의 갯수를 구하는 부분임...
if ($bo_scount) {
  echo "";
} else {
  echo "<tr><td height=100 align=center colspan=3>등록된 글이 없습니다.</td></tr>";
}
?>

</table>

■■■■■■ 여기까지입니다. 제가 소스를 무식하게 뜯어 고친 건 아닌지 모르겠습니다ㅡ.ㅡ;;;

댓글 전체

그렇군요... 근데 시간순대로는 잘 나오는가요? 제가 님의 최근글을 대충 살펴보니까 한군데 시간이 엉킨 것 같더군요. 맨 위 게시글부터 다섯번째 게시글까지 1-2-3-4-5, 이렇게 나와야 하는데 1-5-2-3-4, 이렇게 나오는 것 같습니다. 이건 메모스킨 게시판의 소스와 문제가 생긴 건지..ㅠㅠ 혹시나 해서 00_top.html, 00_bottom.html만 따로 불러보았는데도 여전히 시간순이 엉켜서 나오는군요. 아쉬운대로 이렇게 써야 하는지.. 시간순이 아예 랜덤으로 엉키는 것만 아니라면 어떤 식으로 엉키는지만이라도 알면 좋을텐데..ㅡ.ㅡ;;; 계속 성가시케 해드려서 죄송합니다~~
아닙니다.전혀 이상이 없습니다.
불필요한 코드가 들어있긴 하지만..
잘 나옵니다..
제가 그걸 그대로 해서.. 그룹만 바꿔 올려봤습니다.

** 최근 글만 나타내기
http://www.unieworld.com/board/?doc=all_article.php
** 최근 코멘트만 나타내기..
http://www.unieworld.com/board/?doc=all_article.php

다만...
메모 스킨을 쓰신것 같은데..
제목과.. 내용.. 날짜를 어떻게 기록하는지..
확인하시기 바랍니다. ^.^~~
전체 9,564
그누3질답 내용 검색

회원로그인

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