테스트 사이트 - 개발 중인 베타 버전입니다

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

Winzr 7년 전 조회 2,559

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

 

질문 내용:

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

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

 

</p>

<p>function new_count($table_id) {

 global $g5;</p>

<p>  $intime = date("Y-m-d 00:00:00");

  //$intime = date("Y-m-d H:i:s", time() - (int)(60 * 60 * 24)); // 24시간 이내</p>

<p> // 새글 검색 (댓글 제외)

 $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'";</p>

<p>    $result2 = sql_fetch($sql2);

    $total_count = $result2[cnt];</p>

<p> if ($total_count > 0) {

  $str_cnt .= "".$total_count."";

  return $str_cnt;

 } else {

  $str_cnt .= "";

  return $str_cnt;

 }

}</p>

<p>

 

옛날 코드라 그런지.. 우선은

$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 라인 코드입니다.

 

</p>

<p>function sql_num_rows($result)

{

    if(function_exists('mysqli_num_rows') && G5_MYSQLI_USE)

        <span style="color:#c0392b"><strong>return mysqli_num_rows($result); // 이 부분이 1572 라인</strong></span>

    else

        return mysql_num_rows($result);

}</p>

<p>

 

head.php의 자동 메뉴 코드입니다.

 

</p>

<p>  <?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);</p>

<p>  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 } ?></p>

<p>

 

제 생각엔 head.php의 자동메뉴 코드에서 함수 사용이 잘못된 것 같습니다..

이런 식으로하면 출력이 잘 되긴합니다.

 

어떤 값으로 함수를 불러와야 할지..ㅠㅠ

 

뭐가 문제인지 도저히 감이 안잡힙니다. 제발 도와주세요!

댓글을 작성하려면 로그인이 필요합니다.

답변 3개

채택된 답변
+20 포인트
l
7년 전

위의 제 코드는 테스트를 해보고 알려드리는 겁니다. 혹 순정 테스트 하면서 새글들을 등록하고 변화를 보았나요? 글을 등록하지 않으면 당연히 new_count값은 올라오지 않을테니까요.

 

그리고 head.php에서 메뉴관련 디비(g5_menu)를 보면 bo_table라는 필드가 따로 없습니다. 그래서 me_link에서 bo_table값을 추출하는거구요. 그런데 만일 메뉴를 작성할 때 게시판 링크를 거는 것이 아니라 그룹게시판 링크를 걸었다면 당연히 bo_table값이 없습니다. 그룹아이디가 존재할 뿐이죠. 이해하나요?

만일 그룹게시판 링크를 걸고 그 아래에 서브 메뉴로 게시판을 걸었다면 서브 메뉴에는 bo_table을 추출할 수 있는 me_link값이 들어갑니다. 거기서는 제 코드 방식으로 추출이 가능합니다. 그 때에는 위의 코드를 응용해서 서브 메뉴 루프에서 $row2['me_link']에서 bo_table값을 추출하여  라고 되어 있는 부분에 추가하면 되겠죠. 

 

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

W
Winzr
7년 전
아..네.. 감사합니다.

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

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

https://sir.kr/g5_tip/4022

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

저는 lib/common.lib.php의 수정한 부분
제 기준 2493라인 쯤
[code]
return shorturl($buffer, true);
[/code]

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

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

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

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

댓글을 작성하려면 로그인이 필요합니다.

l
7년 전

</p>

<p>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']."";

}</p>

<p>

이렇게 작성해서 넣고 head.php 파일 보면 순정 파일을 기준으로 122라인에 다음이 있어요.

</p>

<p><a href="<?php echo $row['me_link']; ?>" target="_<?php echo $row['me_target']; ?>" class="gnb_1da"><?php echo $row['me_name'] ?></a></p>

<p>

여기를 다음의 방식처럼 고칩니다.

</p>

<p><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></p>

<p>

그리고 new_count에 대한 스타일 정의를 알아서 하시면 되요. 직접 테스트했으니 안될리는 없습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

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

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

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

댓글을 작성하려면 로그인이 필요합니다.

플라이
7년 전

new_count($row['$bo_table']) - >new_count($row['bo_table']) 이런식으로 호출해 오셔야 하는데 제대로 bo_table 값을 안가져와져서 그런듯 합니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

W
Winzr
7년 전
여러 방법으로 시도해보곤 있는데
echo new_count($row['bo_table']); 아무것도 출력되지 않았습니다.

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인