특정 게시물만 원하는 순서대로 최신글 추출하기
특정 게시물을 최신글로 추출하기 관련 팁을 올린 적이 있었습니다.
https://gnustudy.com/bbs/board.php?bo_table=skin_latest&wr_id=23
위 팁은 단순히 체크한 게시물을 출력했었는데 이번엔 출력 순서까지 지정해보겠습니다.
수정파일1 : lib/latest.lib.php
기본 최신글 함수를 복사해서 함수명을 변경한 후 같은 파일 하단에 새로 추가합니다.
아래 예제에서는 함수명을 function latest_main 으로 변경했습니다.
일단 기본 함수 전체를 복사해서 추가하신 다음 아래 설명해드린 부분만 변경하세요.
그누보드 버전마다 최신글 함수가 조금씩 차이가 있어서 전체 코드는 올려드리지 않으니
현재 사용하시는 버전에 있는 함수를 복사해서 사용하시면 됩니다.
수정해야 할 부분은 빨간색으로 표기해놨습니다.
// 특정 게시물 원하는 순서대로 최신글 추출
// $cache_time 캐시 갱신시간
function latest_main($skin_dir='', $bo_table, $rows=10, $subject_len=40, $cache_time=1, $options='')
{
일단 시작 부분에서 함수명을 latest_main 으로 변경.
...............................................................
...............................................................
그리고 함수 내용 중간쯤에 아래 코드가 있는데
$sql = " select * from {$tmp_write_table} where wr_is_comment = 0 order by wr_num limit 0, {$rows} ";
위 코드를 이렇게 변경합니다.
$sql = " select * from {$tmp_write_table} where wr_is_comment = 0 and wr_1 > '0' order by wr_1+0 desc limit 0, {$rows} ";
.............................
.............................
?>
새로 변경한 이 부분에서 desc 는 입력 값이 높은 게시물부터 출력되고
and wr_1 > '0' order by wr_1+0 desc
이렇게 asc 로 변경하면 낮은 값부터 출력됩니다.
and wr_1 > '0' order by wr_1+0 asc
desc, asc 변경시 바로 반영되지 않으니 환경설정 > 캐시파일 일괄삭제 클릭 후 확인.
wr_1+0 이렇게 뒤에 0을 더해준 이유는 여분필드 타입이 문자형이라서 숫자형으로 변환한 것입니다.
수정파일2 : 게시판스킨 write.skin.php
여분필드 1번을 활용해서 출력 순서 값을 입력합니다. 숫자로 입력하세요.
여기서 입력한 순서대로 출력 됩니다. 빈 값으로 두고 글을 등록하면 최신글로 출력되지 않습니다.
관리자만 입력할 수 있게 해놨습니다.
<?php if ($is_admin) { ?>
<div class="write_div">
<label for="wr_1" class="sound_only">메인출력</label>
<input type="text" name="wr_1" value="<?php echo $wr_1 ?>" id="wr_1" class="frm_input" size="10" placeholder="출력순서">
</div>
<?php } ?>
수정파일 3 : 최신글이 출력되는 파일 (index.php)
최신글을 출력할 때 기본적으로 이렇게 출력하는데
echo latest("basic", notice, 5, 25);
latest 출력 함수를 새로 추가한 함수명으로 교체합니다.
echo latest_main("basic", notice, 5, 25);
최신글 스킨 자체에서는 수정할 부분이 없습니다. 아무 스킨이나 사용해도 됩니다.