메뉴 옆에 새글 갯수를 출력하고 싶습니다.

메뉴 옆에 새글 갯수를 출력하고 싶습니다.

QA

메뉴 옆에 새글 갯수를 출력하고 싶습니다.

답변 3

본문

코드 수정 및 추가를 위해 다시 질문글 작성합니다.

 

질문 내용:

그누보드 환경설정 메뉴에서 추가를 하면 자동 추가되는 그누보드 기본 코드를 사용하고 있습니다.

아래의 함수를 찾았는데 계속 오류만 출력되어 해결법을 알고 싶습니다.

 


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'] ?> 라고 되어 있는 부분에 추가하면 되겠죠. 

 

이미 답을 다 주었습니다. 제가 준 코드를 잘 분석해서 어떻게 응용하면 되는지를 살펴보세요. 

아..네.. 감사합니다.

순정에서는 새 글 등록까지 당연히 해서 테스트를 해보았었지만 안됐으니
제가 뭔가 잘못했던 것 같습니다.

왜 안되는지 문제점을 드디어 찾았습니다..

https://sir.kr/g5_tip/4022

위 짧은 주소 팁을 적용 했었는데 메뉴 등록을 하면 자동으로 bbs, bo_table은 생략되고
"http://도메인.com/테이블명" 이런 식으로만 남게 됩니다.

저는 lib/common.lib.php의 수정한 부분
제 기준 2493라인 쯤


return shorturl($buffer, true);


이것을

        if(basename($_SERVER['PHP_SELF']) != 'menu_list.php') {
			return shorturl($buffer, true);
		} else {
			return $buffer;
		}


이렇게 어드민 페이지에서 메뉴를 등록하는 페이지에서는 적용이 되지 않도록
수정 하였습니다.

혹시나 저 처럼 오래 헤매고 계신 분이 있다면 제 질문으로 도움 얻어가셨으면 좋겠습니다.

그리고 letsgolee님 마지막 답변에서 해답을 찾을 수 있었습니다.
정말 감사드립니다~!

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에 대한 스타일 정의를 알아서 하시면 되요. 직접 테스트했으니 안될리는 없습니다.

답변 정말 감사하고 죄송하지만... 말씀해주신 코드로 직접 상세히 보고 적용 해봤습니다.
그런데

if (preg_match('/bo_table\=([a-zA-Z0-9_]+)/', $row['me_link'], $matches)
이 조건문이 발동을 안하더라구요..

echo로 테스트 해봤는데 0만 출력 됩니다..

혹시나 싶어서 새로 호스팅파서 그누보드 순정으로도 테스트 해봤는데
아무런 반응이 없습니다..ㅠ

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 123,846
© SIRSOFT
현재 페이지 제일 처음으로