BOARD

팁·활용

그누보드 여분필드를 이용해 특정 게시물만 최신글로 추출하는 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 12회 작성일 26-10-04 15:55

본문

그누보드 여분필드를 이용해 특정 게시물만 최신글로 추출하는 방법

그누보드 메인 화면이나 특정 영역에서 관리자가 지정한 특정 게시물만 골라 최신글로 출력하는 방법을 코드 수정 절차와 함께 알아봅니다.

그누보드 여분필드를 이용해 특정 게시물만 최신글로 추출하는 방법

관리자가 지정한 특정 게시물만 메인 화면 등의 최신글 영역에 출력하려면, 최신글 라이브러리 함수에 데이터베이스 쿼리 조건을 추가하고 게시판 스킨과 메인 호출부를 수정해야 합니다.

1. 최신글 라이브러리 함수 수정 (lib/latest.lib.php)

기존 최신글 함수를 복사하여 파일 하단에 새로운 함수명(예: latest_main)으로 추가합니다. 그누보드 버전별로 함수 내용에 차이가 있을 수 있으므로 현재 사용하는 버전의 최신글 함수를 기준으로 합니다. 게시글을 가져오는 쿼리문의 WHERE 절에 여분필드 조건인 and wr_1 = '1'을 추가합니다.

// 특정 게시물 최신글 추출
function latest_main($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time=1, $options='') {
 global $g5;
 //... (중략)...
 if(!G5_USE_CACHE || $cache_fwrite) {
 $list = array();
 $sql = " select * from {$g5['board_table']} where bo_table = '{$bo_table}' ";
 $board = sql_fetch($sql);
 $bo_subject = get_text($board['bo_subject']);
 $tmp_write_table = $g5['write_prefix']. $bo_table; // 게시판 테이블 전체이름
 
 // 여분필드 조건(and wr_1 = '1') 추가
 $sql = " select * from {$tmp_write_table} where wr_is_comment = 0 and wr_1 = '1' order by wr_num limit 0, {$rows} ";
 $result = sql_query($sql);
 for ($i=0; $row = sql_fetch_array($result); $i++) {
 $list[$i] = get_list($row, $board, $latest_skin_url, $subject_len);
 }
 //... (이하 생략)
 }
 //...
}

2. 게시판 스킨 체크박스 추가 (write.skin.php)

관리자가 글을 작성하거나 수정할 때 여분필드 1번(wr_1)을 제어할 수 있도록 게시판 스킨 파일인 write.skin.php에 관리자 전용 체크박스 코드를 추가합니다.

<?php if ($is_admin) {?>
<tr>
 <th scope="row">메인출력</th>
 <td><input type="checkbox" name="wr_1" value="1" <?php echo ($write['wr_1'] == "1")? "checked": "";?>> 메인출력 </td>
</tr>
<?php }?>

3. 메인 최신글 출력 함수 교체 (index.php)

메인 화면 등에서 최신글을 호출하던 기존 latest() 함수 대신, 위에서 새로 정의한 커스텀 함수명 latest_main()으로 변경하여 호출합니다.

변경 코드 예시:

echo latest_main("basic", "notice", 5, 25);

게시판 스킨(write.skin.php)에 관리자 전용 메인 출력 체크박스 추가 방법

그누보드 게시판에서 관리자가 특정 게시물만 메인 화면 등의 최신글로 추출할 수 있도록 글쓰기 및 수정 화면에 여분필드(wr_1) 체크박스 코드를 추가하는 방법입니다.

1. 수정 파일 위치

  • 게시판 스킨 폴더 내의 write.skin.php 파일을 엽니다.

2. 코드 추가 내용

여분필드 1번(wr_1)을 활용해 메인 출력 여부를 결정할 수 있도록 체크박스 입력 폼을 추가합니다. 해당 기능은 주로 관리자가 사용하므로 관리자 권한 조건문($is_admin) 내부 코드로 작성합니다.

<?php if ($is_admin) {?>
<tr>
 <th scope="row">메인출력</th>
 <td><input type="checkbox" name="wr_1" value="1" <?php echo ($write['wr_1'] == "1")? "checked": "";?>> 메인출력 </td>
</tr>
<?php }?>

3. 조건 및 동작 방식

  • 관리자 계정으로 로그인한 상태에서 글 작성 또는 수정 화면에 접근할 때만 '메인출력' 체크박스가 노출됩니다.
  • 체크박스에 체크한 후 글을 등록하거나 수정하면 wr_1 필드에 값(1)이 저장되며, 이후 최신글 추출 함수(and wr_1 = '1')와 연동되어 해당 게시물만 메인 최신글 영역에 노출됩니다.

메인 화면에서 커스텀 최신글 함수 호출하기

메인 화면(예: index.php) 등에서 여분필드 조건이 반영된 커스텀 최신글 함수를 호출하려면, 기존 기본 latest() 함수 호출 코드를 새로 지정한 함수명인 latest_main()으로 교체해야 합니다.

1. 수정 위치 확인

  • 최신글을 출력하는 메인 화면 파일(예: index.php)을 엽니다.

2. 함수 호출 코드 변경

  • 기존의 기본 최신글 출력 코드:
    echo latest("basic", notice, 5, 25);
  • 위 코드를 새로 생성한 커스텀 최신글 함수명인 latest_main으로 교체합니다.
    echo latest_main("basic", notice, 5, 25);

3. 매개변수 설명

  • 첫 번째 인수("basic"): 사용할 최신글 스킨 디렉토리명입니다.
  • 두 번째 인수(notice): 최신글을 가져올 게시판 아이디(bo_table)입니다.
  • 세 번째 인수(5): 출력할 행(게시물) 수입니다.
  • 네 번째 인수(25): 제목의 최대 글자 수입니다.

그누보드 최신글 캐시 갱신 조치

최신글 함수를 수정하거나 출력 조건(정렬 및 여분필드 조건 등)을 변경한 뒤 화면에 바로 반영되지 않을 때는 그누보드 캐시 파일로 인해 기존 내용이 유지되는 것일 수 있습니다. 이 경우 관리자 페이지에서 캐시 파일을 일괄 삭제하여 갱신할 수 있습니다.

확인 및 조치 방법

  1. 그누보드 관리자 모드에 로그인합니다.
  2. 상단 메뉴에서 환경설정으로 이동한 뒤 캐시파일 일괄삭제 항목을 찾아 클릭합니다.
  3. 삭제 완료 후 메인 화면(index.php)을 새로고침하여 수정된 최신글 출력이 정상 반영되었는지 확인합니다.

상황별 판단 가이드

내 상황우선할 판단다음 행동
메인 화면 최신글에 특정 게시물만 골라서 노출하고 싶을 때기존 latest() 함수를 수정하는 대신 복사하여 새로운 커스텀 함수(latest_main)를 만들고 쿼리 조건 추가lib/latest.lib.php에 커스텀 함수를 추가하고 쿼리문에 and wr_1 = '1' 조건 삽입
관리자가 글 작성 시 메인 노출 여부를 쉽게 선택하게 하고 싶을 때게시판 스킨 파일에 관리자 권한 조건문($is_admin)이 포함된 여분필드 체크박스 추가write.skin.php에 wr_1 체크박스 입력 폼 코드 삽입
코드를 모두 수정했는데도 메인 화면 최신글에 반영되지 않을 때그누보드 내부 캐시 파일로 인한 지연 여부 확인관리자 페이지의 환경설정 메뉴에서 '캐시파일 일괄삭제' 실행

실전 FAQ

Q. 함수를 수정했는데 메인 화면에 변경 사항이 바로 반영되지 않습니다.

  • 예외 및 대안: 그누보드 캐시 기능이 활성화되어 있으면 코드를 수정해도 이전 결과가 유지될 수 있습니다. 관리자 모드의 환경설정에서 '캐시파일 일괄삭제'를 실행한 후 새로고침하여 확인하세요.

Q. 여분필드 wr_1 대신 다른 번호나 여러 필드를 동시에 조건으로 쓰려면 어떻게 해야 하나요?

  • 막히는 지점: wr_1 외에 다른 여분필드를 쓰거나 배열 형태로 여러 필드를 지정하려면 함수 호출 시 options 파라미터로 필드명을 전달하고 쿼리문의 WHERE 조건을 확장해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.