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

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

QA

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

본문

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

 

질문 내용:

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

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

 


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만 출력 됩니다..

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

답변을 작성하시기 전에 로그인 해주세요.
전체 123,614 | RSS
QA 내용 검색

회원로그인

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