2026, 새로운 도약을 시작합니다.

특정 게시판에만 리스트 정렬 필드 옵션 추가 채택완료

관리자 게시판 설정에서 리스트 정렬 필드에 특정 게시판인 경우에만 옵션을 추가하려고 합니다.

Copy


function get_board_sort_fields($board=array(), $make_key_return=''){

    $bo_sort_fields = run_replace('get_board_sort_fields', array(

        array('wr_num, wr_reply', '기본'),

        array('wr_datetime asc', '날짜 이전것 부터'),

        array('wr_datetime desc', '날짜 최근것 부터'),

        array('wr_hit asc, wr_num, wr_reply', '조회수 낮은것 부터'),

        array('wr_hit desc, wr_num, wr_reply', '조회수 높은것 부터'),

        array('wr_last asc', '최근글 이전것 부터'),

        array('wr_last desc', '최근글 최근것 부터'),

        array('wr_comment asc, wr_num, wr_reply', '댓글수 낮은것 부터'),

        array('wr_comment desc, wr_num, wr_reply', '댓글수 높은것 부터'),

        array('wr_good asc, wr_num, wr_reply', '추천수 낮은것 부터'),

        array('wr_good desc, wr_num, wr_reply', '추천수 높은것 부터'),

        array('wr_nogood asc, wr_num, wr_reply', '비추천수 낮은것 부터'),

        array('wr_nogood desc, wr_num, wr_reply', '비추천수 높은것 부터'),

        array('wr_subject asc, wr_num, wr_reply', '제목 오름차순'),

        array('wr_subject desc, wr_num, wr_reply', '제목 내림차순'),

        array('wr_name asc, wr_num, wr_reply', '글쓴이 오름차순'),

        array('wr_name desc, wr_num, wr_reply', '글쓴이 내림차순'),

        array('ca_name asc, wr_num, wr_reply', '분류명 오름차순'),

        array('ca_name desc, wr_num, wr_reply', '분류명 내림차순'),

    ), $board, $make_key_return);

    if( $make_key_return ){

        

        $returns = array();

        foreach( $bo_sort_fields as $v ){

            $key = preg_replace("/[\\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $v[0]);

            $returns[$key] = $v[0];

        }

        

        return $returns;

    }

    return $bo_sort_fields;

}

기본 정렬 옵션을 출력하는 곳인데, $bo_sort_fields 에 hook 이 적용되어있어서

기본 함수를 건드리지않고 hook 으로 추가할 수 있을 것 같아서 gpt 의 도움을 받아 적용을 해보았는데 정렬 필드에 옵션도 안뜨고, 정렬 필드 이후에 오는 레이아웃들이 뜨질 않습니다ㅠ

Copy


if( ! function_exists('get_custom_board_sort_fields') ) {

    add_replace('get_board_sort_fields', 'get_custom_board_sort_fields', G5_HOOK_DEFAULT_PRIORITY);

    function get_custom_board_sort_fields($bo_sort_fields, $board, $make_key_return) {

        if( !isset($board['gr_id']) || $board['gr_id'] !== 'products' ) return $bo_sort_fields;

        $color_priority_sort = "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc";

        $custom_field = array($color_priority_sort, '출력순서, 색상 오름차순');

        $sort_keys = array_map(function($item) {

            return preg_replace("/[\\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $item[0]);

        }, $bo_sort_fields);

        $custom_key = preg_replace("/[\\'\"\\\'\\\"\%\=\(\)\/\^\*\s]/", "", $custom_field[0]);

        if( !in_array($custom_key, $sort_keys) ) {

            $bo_sort_fields[] = $custom_field;

        }

        return $bo_sort_fields;

    }

}

이게 gpt 가 알려준 방법인데 적용이 되질 않습니다ㅠ

어떻게 하면 게시판 설정에서 특정 게시판에만 정렬 필드의 옵션을 추가할 수 있나요?

답변 5개

채택된 답변
+20 포인트

extend/default.config.php에 추가

1. 직접 정렬필드 지정하기

if(isset($board['gr_id']) && $board['gr_id']=='products'){ //or if($bo_table=='free')

 $board['bo_sort_field']= "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc";

}


2. hook으로 관리자 페이지에 추가하기 : 챗지피티가 쓰잘데없는 잡다한 코드를 알려주었네요

if(isset($board['gr_id']) && $board['gr_id']=='products'){ 
    add_replace('get_board_sort_fields', 'get_custom_board_sort_fields', G5_HOOK_DEFAULT_PRIORITY);
    function get_custom_board_sort_fields($bo_sort_fields) {
        $color_priority_sort = "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc";
        $bo_sort_fields[] = array($color_priority_sort, '출력순서, 색상 오름차순');
        return  $bo_sort_fields;
    }
}

cf1)그룹 아이디가 아닌 게시판 아이디로 하려면 if문에 $board['gr_id'] 대신 $bo_table 을 사용하면 됩니다

cf2) 정렬 코드 확인은 리스트 스킨 상단에 echo $sql; 

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

답변에 대한 댓글 1개

답변 감사드립니다!

알려주신 방법을 보고 $board 가 문제였단거를 깨달았네요;;

get_custom_board_sort_fields 함수에 매개변수 $bo_sort_fileds 만 넣으니 리스트정렬 아래에 오는 내용들도 잘 출력이 됩니다.

함수 안에서 $board['gr_id'] 로 걸어놨던 조건문을 밖으로 빼서 해결 했습니다!

[code]
if( ! function_exists('get_custom_board_sort_fields') ) {
if( isset($board['gr_id']) && $board['gr_id'] == 'products' ) {
add_replace('get_board_sort_fields', 'get_custom_board_sort_fields', G5_HOOK_DEFAULT_PRIORITY);
function get_custom_board_sort_fields($bo_sort_fields) {

$color_priority_sort = "wr_11 asc, (case wr_12 when 'red' then 1 when 'orange' then 2 when 'yellow' then 3 else 99 end) asc, wr_num, wr_reply";
$bo_sort_fields[] = array($color_priority_sort, '출력순서, 색상 오름차순');
return $bo_sort_fields;
}
}
}
[/code]
알려주신 방법으로 적용되어 해결했습니다!

답변 감사드립니다!

좋은 하루 되세요! :)

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

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

답변에 대한 댓글 1개

상세한 답변 감사드립니다!

우선 알려주신 방법은 기존 run_replace 있던거를 한번 더 다시 정의해주는 느낌이네요;;

제가 하려고 했던 방법은 그냥 원하는 option 만 추가하는 방법이었어서...

제 의도와 맞는 답변은 균이님께서 알려주신 방법이라 채택드리지 못해 죄송합니다!ㅠ

추후에 또 지금과 같은 상황이 생긴다면 알려주신 방법으로도 적용해볼게요!

좋은 하루 되세요! :)

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

https://sir.kr/g5_tip/22019

여기도 한번 확인해보세요

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

답변에 대한 댓글 1개

알려주신 팁을 보니 제가 예전에 추천하고 스크랩했던 글이네요!
감사합니다! :)

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

3717582201_1745317582.4458.gif

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

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

sorting_add_V1.php 

* /extend/ 폴더 아래 넣어주세요 

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

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

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

로그인
🐛 버그신고