BOARD

강좌·기초

그누보드4·5 최신글 기능 확장 및 커스텀 함수 구현 가이드

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 9회 작성일 26-09-24 17:02

본문

그누보드4·5 최신글 기능 확장 및 커스텀 함수 구현 가이드

그누보드 운영자와 개발자가 기본 최신글 함수를 확장하여 랜덤 추출, 카테고리 필터링, 원글 아래 답글 정렬 등 다양한 요구사항을 구현하는 방법을 알아봅니다.

그누보드 최신글 무작위(랜덤) 출력 방법

그누보드에서 최신글을 무작위 순서로 출력하려면 데이터베이스 쿼리에 order by rand() 조건을 적용한 커스텀 최신글 함수를 구현하여 사용해야 합니다.

1. 함수 구현 및 적용 위치

  • 그누보드 라이브러리 파일(lib/latest.lib.php) 또는 확장 기능 파일에 랜덤 추출 쿼리를 포함하는 함수를 추가합니다.
  • 예시 함수 코드 구조는 아래와 같이 작성할 수 있습니다.
function hp_latest_rand($skin_dir="", $bo_table, $rows=10, $subject_len=40, $options="") {
 global $g5; 
 if (!$skin_dir) $skin_dir = 'basic';
 $latest_skin_path = G5_SKIN_PATH.'/latest/'.$skin_dir;
 $latest_skin_url = G5_SKIN_URL.'/latest/'.$skin_dir;
 
 $list = array();
 $sql = " select * from {$g5['board_table']} where bo_table = '{$bo_table}' ";
 $board = sql_fetch($sql);
 $tmp_write_table = $g5['write_prefix']. $bo_table;
 
 // 댓글을 제외하고 rand() 함수를 이용해 무작위 정렬
 $sql = " select * from {$tmp_write_table} where wr_is_comment = 0 order by rand() desc 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);
 }
 
 ob_start();
 include $latest_skin_path.'/latest.skin.php';
 $content = ob_get_contents();
 ob_end_clean();
 return $content;
}

2. 템플릿 호출 방법

  • 메인 페이지 등 원하는 위치에서 작성한 함수를 호출합니다.
  • 사용 예시: <?php echo hp_latest_rand("최신글스킨", "게시판이름", 출력갯수, 제목글자수);?>

3. 주의사항 및 다음 행동

  • 그누보드 코어 파일 수정 전 원본 파일을 반드시 백업하시기 바랍니다.
  • 그누보드는 인덱스 최신글에 캐시 기능을 사용하므로, 랜덤 추출 시 config.php에서 G5_USE_CACHE를 false로 설정하거나 커스텀 함수의 캐시 갱신 시간을 조절해야 실시간으로 결과가 반영됩니다.
  • 함수 이름이 기존 기본 함수와 중복되지 않도록 접두사(hp_) 등을 붙여 사용하는 것이 안전합니다.

특정 카테고리 최신글 출력 방법

그누보드에서 특정 분류(카테고리)에 해당하는 글만 추출하여 최신글로 출력하려면, SQL 쿼리의 조건절에 ca_name 필드를 지정한 커스텀 함수를 구현하고 이를 호출해야 합니다.

1. 커스텀 함수 구현 및 수정

/lib/latest.lib.php 파일 또는 사용자 정의 확장 파일에 hp_latest_category 함수를 추가하거나 수정합니다. 쿼리문에서 특정 카테고리 이름을 비교하는 조건(ca_name = '{$options}' 또는 ca_name = '$category')을 포함하도록 작성합니다.

function hp_latest_category ($skin_dir="", $bo_table, $rows=10, $subject_len=40, $options="") {
 global $g5;
 // 경로 설정 및 캐시 처리 구문 생략...
 $tmp_write_table = $g5['write_prefix']. $bo_table;
 $sql = " select * from {$tmp_write_table} where ca_name = '{$options}' order by wr_num limit 0, {$rows} ";
 $result = sql_query($sql);
 // 리스트 반환 및 스킨 포함 처리...
}

2. 함수 호출 및 스킨 링크 수정

  • 함수 호출부: 필요한 위치에서 옵션 인자에 카테고리명을 전달하여 호출합니다.<?php echo hp_latest_category("최신글스킨", "게시판이름", 게시물수, 제목글자수, "카테고리이름");?>
  • 스킨 파일 수정: skin/latest/스킨/latest.skin.php 파일 내에서 일반 최신게시물의 경우 링크 주소에 &amp;sca={$category} 또는 bo_table=$bo_table&amp;sca=$category 형태를 반영하여 카테고리 필터링이 정상적으로 유지되도록 수정합니다.

3. 주의사항 및 캐시 설정

  • 그누보드는 기본적으로 최신글에 캐시 기능을 사용하므로, 카테고리별 추출이나 실시간 반영이 필요할 때 캐시 갱신 시간이나 G5_USE_CACHE 설정을 확인해야 합니다.
  • 그누보드 코어 업데이트 시 함수명이 중복되지 않도록 hp_latest_ 등의 접두사를 사용하는 것을 권장합니다.

최신글 목록에서 원본 글 아래 답글 정렬하기

그누보드 최신글 목록에서 답글이 원본 글 바로 아래에 위치하도록 정렬하려면, 최신글 함수 내부의 SQL 쿼리문에서 정렬 기준을 변경해야 합니다.

1. 수정 위치 확인

  • 그누보드 버전 및 구현 방식에 따라 lib/latest.lib.php 파일 또는 사용자가 정의한 커스텀 최신글 함수(예: hp_latest_re) 내부의 SQL 쿼리를 확인합니다.

2. 적용할 쿼리 조건

  • 기존의 작성일자(wr_datetime)나 기본 정렬 대신, 원글과 답글의 계층 순서인 wr_num을 오름차순으로 정렬하고 이어 wr_id를 오름차순으로 정렬하도록 쿼리를 작성합니다.
  • 예시 쿼리 구문:
    select * from {$tmp_write_table} where wr_is_comment = 0 order by wr_num asc, wr_id asc limit 0, {$rows}

3. 주의사항 및 다음 행동

  • 코어 파일을 직접 수정하기보다 중복 방지를 위한 접두사(hp_)를 사용한 커스텀 함수로 구현하는 것이 코어 업데이트 시 유지보수에 유리합니다.
  • 그누보드5 이후 버전에서는 데이터베이스 구조나 캐시 설정(G5_USE_CACHE)에 따라 결과 반영 여부가 다를 수 있으므로, 쿼리 수정 후 메인 페이지 등 호출 위치에서 원글 아래에 답글이 세트로 자연스럽게 이어지는지 확인하세요.

커스텀 최신글 함수 이름 지정 방법

그누보드 업그레이드나 코어 파일 수정 시 발생할 수 있는 함수명 중복 오류와 충돌을 예방하기 위해, 커스텀 최신글 함수는 기존 코어 함수(latest)와 구분되는 hp_latest_ 형태의 접두사를 붙여서 지정해야 합니다.

함수 이름 지정 및 적용 조건

  • 함수명 규칙: 기존 latest 함수 이름과 겹치지 않도록 hp_latest_rand, hp_latest_category, hp_latest_re, hp_latest_datetime과 같이 hp_latest_ 접두사를 포함하여 정의합니다.
  • 적용 위치: 그누보드5 환경 기준으로 lib/latest.lib.php 파일에 필요한 커스텀 함수 내용을 추가하거나, extend 폴더에 사용자 정의 함수 파일(.php)을 생성하여 등록합니다.

그누보드 최신글 기능 확장 가이드

  • 내 상황: 그누보드 운영 중 기본 최신글 기능 외에 랜덤 추출, 특정 카테고리 필터링, 원글 아래 답글 정렬 등 확장된 기능이 필요한 경우
  • 선택 기준: 함수명 중복과 코어 파일 충돌을 방지하기 위해 hp_latest_ 등의 고유 접두사를 사용한 커스텀 함수 방식을 적용
  • 다음 행동: lib/latest.lib.php 또는 extend 폴더에 목적에 맞는 SQL 쿼리(order by rand(), ca_name = '분류명', wr_num asc)를 포함하는 함수를 구현하고 템플릿에 호출

실전 FAQ

Q. 최신글을 무작위(랜덤)로 출력할 때 새로고침해도 글이 바뀌지 않습니다.

  • 원인 및 대책: 그누보드는 기본적으로 인덱스 최신글에 캐시 기능을 사용하므로 config.php의 G5_USE_CACHE 설정을 false로 변경하거나, 커스텀 함수의 캐시 갱신 시간 값을 조정해야 합니다.

Q. 특정 카테고리 최신글을 여러 개 배치했는데 첫 번째 것만 반복 출력됩니다.

  • 원인 및 대책: 함수 호출 시 전달하는 옵션 인자나 SQL 쿼리의 조건문(ca_name)이 올바르게 분기되지 않았을 수 있으므로 파라미터 전달 방식을 확인해야 합니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.