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

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

QA

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

그누보드5(영카트) 버전

5.6.10

사용 PHP 버전

7.3

본문

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


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 의 도움을 받아 적용을 해보았는데 정렬 필드에 옵션도 안뜨고, 정렬 필드 이후에 오는 레이아웃들이 뜨질 않습니다ㅠ

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

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; 

 

 

답변 감사드립니다!

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

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

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


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;
        }
    }
}

알려주신 방법으로 적용되어 해결했습니다!

답변 감사드립니다!

좋은 하루 되세요! :)

sorting_add_V1.php 

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

 

 


<?php if (!defined('_GNUBOARD_')) exit;
add_replace('get_board_sort_fields', function( $sorting ){
    $sorting[] = array('wr_1 asc, wr_num, wr_reply', '여분필드 1 오름차순');
    $sorting[] = array('wr_1 desc, wr_num, wr_reply', '여분필드 1 내림차순');
    $sorting[] = array('wr_comment_reply asc, wr_num, wr_reply', 'wr_co_re 오름차순');
    $sorting[] = array('wr_comment_reply desc, wr_num, wr_reply', 'wr_co_re 내림차순');
    $sorting[] = array('wr_parent asc', 'wr_parent 오름차순');
    $sorting[] = array('wr_parent desc', 'wr_parent 내림차순');
    $sorting[] = array('wr_datetime asc, wr_parent', '부모날짜 이전것 부터');
    $sorting[] = array('wr_datetime desc, wr_parent', '부모날짜 최근것 부터');
    
    
        
    //같은 방식으로 계속 추가 가능
    return $sorting;
}, G5_HOOK_DEFAULT_PRIORITY, 1);
?>
 

https://sir.kr/g5_tip/22019

 

여기도 한번 확인해보세요

 
<?php if (!defined('_GNUBOARD_')) exit;
// 재외할 게시판    //
$bo_tables = array('notice', 'free', 'aifree', 'hu', 'moa', 'moatip', 'dev', 'membermoa', 'chu');
// 제외할 게시판 끝  //
// 현재 게시판이 제외 목록에 있는지 확인
if (!in_array($bo_table, $bo_tables)) {
    add_replace('get_board_sort_fields', function($sorting) {
        $sorting[] = array('wr_1 asc, wr_num, wr_reply', '여분필드 1 오름차순');
        $sorting[] = array('wr_1 desc, wr_num, wr_reply', '여분필드 1 내림차순');
        $sorting[] = array('wr_comment_reply asc, wr_num, wr_reply', 'wr_co_re 오름차순');
        $sorting[] = array('wr_comment_reply desc, wr_num, wr_reply', 'wr_co_re 내림차순');
        $sorting[] = array('wr_parent asc', 'wr_parent 오름차순');
        $sorting[] = array('wr_parent desc', 'wr_parent 내림차순');
        $sorting[] = array('wr_datetime asc, wr_parent', '부모날짜 이전것 부터');
        $sorting[] = array('wr_datetime desc, wr_parent', '부모날짜 최근것 부터');
        
        //같은 방식으로 계속 추가 가능
        return $sorting;
    }, G5_HOOK_DEFAULT_PRIORITY, 1);
}
?>

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

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

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

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

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

좋은 하루 되세요! :)

답변을 작성하시기 전에 로그인 해주세요.
전체 5
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT