메뉴 옆에 새글 갯수를 출력하고 싶습니다.
본문
코드 수정 및 추가를 위해 다시 질문글 작성합니다.
질문 내용:
그누보드 환경설정 메뉴에서 추가를 하면 자동 추가되는 그누보드 기본 코드를 사용하고 있습니다.
아래의 함수를 찾았는데 계속 오류만 출력되어 해결법을 알고 싶습니다.
function new_count($table_id) {
global $g5;
$intime = date("Y-m-d 00:00:00");
//$intime = date("Y-m-d H:i:s", time() - (int)(60 * 60 * 24)); // 24시간 이내
// 새글 검색 (댓글 제외)
$tmp_write_table = G5_TABLE_PREFIX."write_".$table_id;
$sql2 = "SELECT count(*) AS cnt FROM $tmp_write_table WHERE wr_is_comment = '0' and wr_datetime >='$intime'";
$result2 = sql_fetch($sql2);
$total_count = $result2[cnt];
if ($total_count > 0) {
$str_cnt .= "".$total_count."";
return $str_cnt;
} else {
$str_cnt .= "";
return $str_cnt;
}
}
옛날 코드라 그런지.. 우선은
$total_count = mysql_num_rows($result2); 이 부분을
$total_count = sql_num_rows($result2); 이렇게 변경 해주었습니다.
>> 그러나 $bo_table 값이 없는 페이지 (index.php 등) 에서는 메뉴 옆에
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /host/home/test2/html/lib/common.lib.php on line 1572
이런 오류가 출력 됩니다.
>> $bo_table 값이 있는 게시판으로 가면 아무것도 출력되지 않습니다.
lib/common.lib.php의 1572 라인 코드입니다.
function sql_num_rows($result)
{
if(function_exists('mysqli_num_rows') && G5_MYSQLI_USE)
return mysqli_num_rows($result); // 이 부분이 1572 라인
else
return mysql_num_rows($result);
}
head.php의 자동 메뉴 코드입니다.
<?php
$sql = "select * from {$g5['menu_table']} where me_use = '1' and length(me_code) = '2' order by me_order, me_id ";
$result = sql_query($sql, false);
for ($i=0; $row=sql_fetch_array($result); $i++) {
?>
<li>
<a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="menu-nav-left <?php if($row['me_link'] == G5_URL.'/'.$bo_table) { echo 'on'; } ?>">
<?php echo $row['me_name'] ?><?php echo new_count($row['$bo_table']); ?>
</a>
</li>
<?php } ?>
제 생각엔 head.php의 자동메뉴 코드에서 함수 사용이 잘못된 것 같습니다..
<?php echo new_count("noticeboard"); ?> 이런 식으로하면 출력이 잘 되긴합니다.
어떤 값으로 함수를 불러와야 할지..ㅠㅠ
뭐가 문제인지 도저히 감이 안잡힙니다. 제발 도와주세요!
!-->!-->!-->답변 3
위의 제 코드는 테스트를 해보고 알려드리는 겁니다. 혹 순정 테스트 하면서 새글들을 등록하고 변화를 보았나요? 글을 등록하지 않으면 당연히 new_count값은 올라오지 않을테니까요.
그리고 head.php에서 메뉴관련 디비(g5_menu)를 보면 bo_table라는 필드가 따로 없습니다. 그래서 me_link에서 bo_table값을 추출하는거구요. 그런데 만일 메뉴를 작성할 때 게시판 링크를 거는 것이 아니라 그룹게시판 링크를 걸었다면 당연히 bo_table값이 없습니다. 그룹아이디가 존재할 뿐이죠. 이해하나요?
만일 그룹게시판 링크를 걸고 그 아래에 서브 메뉴로 게시판을 걸었다면 서브 메뉴에는 bo_table을 추출할 수 있는 me_link값이 들어갑니다. 거기서는 제 코드 방식으로 추출이 가능합니다. 그 때에는 위의 코드를 응용해서 서브 메뉴 루프에서 $row2['me_link']에서 bo_table값을 추출하여 <?php echo $row2['me_name'] ?> 라고 되어 있는 부분에 추가하면 되겠죠.
이미 답을 다 주었습니다. 제가 준 코드를 잘 분석해서 어떻게 응용하면 되는지를 살펴보세요.
new_count($row['$bo_table']) - >new_count($row['bo_table']) 이런식으로 호출해 오셔야 하는데 제대로 bo_table 값을 안가져와져서 그런듯 합니다.
function new_count($table_id)
{
global $g5;
$intime = date("Y-m-d 00:00:00");
//$intime = date("Y-m-d H:i:s", time() - (int)(60 * 60 * 24)); // 24시간 이내
// 새글 검색 (댓글 제외)
$tmp_write_table = G5_TABLE_PREFIX . "write_" . $table_id;
$sql = "SELECT count(*) AS cnt FROM $tmp_write_table WHERE wr_is_comment = '0' and wr_datetime >='$intime'";
$row = sql_fetch($sql);
return $row['cnt'] == 0 ? "" : "".$row['cnt']."";
}
이렇게 작성해서 넣고 head.php 파일 보면 순정 파일을 기준으로 122라인에 다음이 있어요.
<a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="gnb_1da"><?php echo $row['me_name'] ?></a>
여기를 다음의 방식처럼 고칩니다.
<a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="gnb_1da"><?php echo $row['me_name'] ?><?php if (preg_match('/bo_table\=([a-zA-Z0-9_]+)/', $row['me_link'], $matches)) echo ' <span class="new_count">' . new_count($matches[1]) . '</span>';?></a>
그리고 new_count에 대한 스타일 정의를 알아서 하시면 되요. 직접 테스트했으니 안될리는 없습니다.
!-->!-->!-->